localtime_s,_localtime32_s _localtime64_s
轉換時間值,並更正當地時區為準。 這些是舊版本地時間、 _localtime32、 _localtime64 中所述的安全性增強功能與安全性功能,則在 CRT 中。
errno_t localtime_s(
struct tm* _tm,
const time_t *time
);
errno_t _localtime32_s(
struct tm* _tm,
const time32_t *time
);
errno_t _localtime64_s(
struct tm* _tm,
const _time64_t *time
);
參數
_tm
若要填入時間結構指標。time
預存時間的指標。
傳回值
如果成功的話,則為零。 如果失敗,傳回的值會是一個錯誤碼。 錯誤代碼被定義在 Errno.h 中。 如需這些錯誤的清單,請參閱 errno。
錯誤狀況
_tm |
time |
傳回值 |
在 [值_tm |
叫用無效的參數處理常式 |
---|---|---|---|---|
NULL |
任何 |
EINVAL |
不能修改 |
是 |
不NULL (指向有效的記憶體) |
NULL |
EINVAL |
所有的欄位設定為-1 |
是 |
不NULL (指向有效的記憶體) |
小於 0 或大於_MAX__TIME64_T |
EINVAL |
所有的欄位設定為-1 |
否 |
如果是第一個的兩個錯誤條件,不正確的參數處理常式會叫用,如所述參數驗證。 如果執行,則允許繼續執行,這些函式會設定errno到EINVAL ,並傳回EINVAL。
備註
_localtime32_s函式將轉換儲存成一次 time_t 值,並將結果儲存在結構中的型別tm。 long值timer代表從午夜到現在所經過的秒數 (00: 00: 00)、 1970 年 1 月 1,UTC。 這個值通常取自time函式。
_localtime32_s如果使用者第一次設定全域環境變數,如當地時區計算修正TZ。 當TZ設定,其他三個環境變數 (_timezone, _daylight,和_tzname) 也會自動設定。 如果TZ未設定變數, localtime32_s會嘗試使用 [控制台] 中的日期/時間應用程式中所指定的時區資訊。 如果無法取得這項資訊,PST8PDT,其代表太平洋時區,會使用預設值。 請參閱 _tzset 如需這些變數的說明。 TZMicrosoft 擴充功能且不屬於 ANSI 標準解析度的localtime。
注意事項 |
---|
目標環境應該嘗試判斷是否日光節約時間生效。 |
_localtime64_s使用__time64_t結構,可讓 23: 59: 59 之間,3000 年 12 月 31,時間 (UTC),表示出的日期,而_localtime32_s代表透過 03: 14: 07 以後 2038 年 1 月 19 日,UTC 日期。
localtime_s是內嵌函式評估_localtime64_s,以及time_t相當於__time64_t。 如果您要強制編譯器解譯time_t為舊的 32 位元time_t,您可以定義_USE_32BIT_TIME_T。 如此一來,這會導致localtime_s估算_localtime32_s。 建議您不要因為您的應用程式可能會失敗之後 2038 年 1 月 19 日,而且不允許在 64 位元平台上。
結構型別的欄位 tm 儲存下列的值,每一個都是int。
tm_sec
分鐘後的秒數 (0 – 59)。tm_min
整點小時之後的分鐘 (0 – 59)。tm_hour
午夜之後的小時 (0-23)。tm_mday
日期的月份 (1 – 31)。tm_mon
月份 (0 – 11。 年 1 月 = 0)。tm_year
年份 (目前年份減 1900年)。tm_wday
星期幾 (0 – 6。 星期日 = 0)。tm_yday
年中的日 (0 – 365。 1 月 1 日 = 0)。tm_isdst
正數值,如果日光節約時間生效。 日光節約時間沒有作用 ; 如果為 0 如果日光節約時間的狀態是未知的負數值。 如果TZ被設定環境變數,那麼 c 執行階段程式庫假設規則適用於美國實作日光節約時間 (DST) 的計算。
需求
常式 |
所需的標頭 |
---|---|
localtime_s |
<time.h> |
_localtime32_s |
<time.h> |
_localtime64_s |
<time.h> |
如需相容性資訊,請參閱相容性在簡介中。
範例
// crt_localtime_s.c
/* This program uses _time64 to get the current time
* and then uses _localtime64_s() to convert this time to a structure
* representing the local time. The program converts the result
* from a 24-hour clock to a 12-hour clock and determines the
* proper extension (AM or PM).
*/
#include <stdio.h>
#include <string.h>
#include <time.h>
int main( void )
{
struct tm newtime;
char am_pm[] = "AM";
__time64_t long_time;
char timebuf[26];
errno_t err;
// Get time as 64-bit integer.
_time64( &long_time );
// Convert to local time.
err = _localtime64_s( &newtime, &long_time );
if (err)
{
printf("Invalid argument to _localtime64_s.");
exit(1);
}
if( newtime.tm_hour > 12 ) // Set up extension.
strcpy_s( am_pm, sizeof(am_pm), "PM" );
if( newtime.tm_hour > 12 ) // Convert from 24-hour
newtime.tm_hour -= 12; // to 12-hour clock.
if( newtime.tm_hour == 0 ) // Set hour to 12 if midnight.
newtime.tm_hour = 12;
// Convert to an ASCII representation.
err = asctime_s(timebuf, 26, &newtime);
if (err)
{
printf("Invalid argument to asctime_s.");
exit(1);
}
printf( "%.19s %s\n", timebuf, am_pm );
}
範例輸出
Fri Apr 25 01:19:27 PM
.NET Framework 對等用法
請參閱
參考
ctime、 _ctime32、 _ctime64、 _wctime、 _wctime32、 _wctime64
gmtime_s,_gmtime32_s _gmtime64_s