localtime_s、_localtime32_s、_localtime64_s
時刻値に変換されローカル タイム ゾーンを変更します。これらは CRT のセキュリティ機能 に説明されているようにのセキュリティが強化された localtime_localtime32_localtime64 のバージョンです。
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
格納されている時刻へのポインター。
戻り値
正常に終了した場合は 0 を返します。エラーが発生した場合の戻り値はエラー コードです。エラー コードはErrno.h で定義されます。これらのエラーの一覧についてはerrno を参照してください。
エラー条件
_tm |
time |
戻り値 |
_tm の値 |
無効なパラメーター ハンドラーを呼び出します |
---|---|---|---|---|
NULL |
任意 |
EINVAL |
変更されない |
○ |
NULL 以外 (有効なメモリを指し示している) |
NULL |
EINVAL |
-1 へのすべてのフィールドの設定 |
○ |
NULL 以外 (有効なメモリを指し示している) |
_MAX__TIME64_T 未満にが 0 より大きい |
EINVAL |
すべてのフィールドが -1 に設定される |
X |
最初の 2 つのエラー条件の場合、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。実行の継続が許可された場合、これらの関数は errno を EINVAL に設定し、EINVAL を返します。
解説
_localtime32_s 関数は、time_t 型の値として格納されている時刻を変換し、その結果を tm 型の構造体に格納します。long 型の timer 値は、UTC の 1970 年 1 月 1 日 00 時 00 分 00 秒からの経過秒数を表します。通常、この値は time 関数で取得されます。
_localtime32_s 関数は、ユーザーが最初に TZ グローバル環境変数を設定している場合、時刻を現地のタイム ゾーンに合わせて修正します。TZ が設定されると、他の 3 つの環境変数 (_timezone、_daylight、および _tzname) が自動的に設定されます。TZ 変数が設定されていない場合、localtime32_s 関数は [コントロール パネル] の [日付と時刻] で指定されているタイム ゾーンの情報を取得しようとします。この情報を取得できない場合太平洋タイム ゾーンを表す PST8PDT が既定で使用されます。これらの変数については、「_tzset」を参照してください。TZ は、Microsoft 拡張機能であり、localtime の ANSI 規格には含まれていません。
[!メモ]
対象の環境で夏時間が有効かどうかを確認してください。
_localtime64_s は __time64_t 構造を使用する日付を 23:59 によって表されるを : _localtime32_s が 03:14 日時を表すのに対し59 (UTC)3000 12 年 1 月 31 日の世界協定時刻 : 1 年 1 月 07 日 19 時 2038 の 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> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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