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 |
any |
EINVAL |
変更されない |
必要 |
NULL 以外 (有効なメモリを指し示している) |
NULL |
EINVAL |
すべてのフィールドが -1 に設定される |
必要 |
NULL 以外 (有効なメモリを指し示している) |
0 未満または _MAX__TIME64_T を超える |
EINVAL |
すべてのフィールドが -1 に設定される |
不要 |
最初の 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 規格には含まれていません。
注意
対象の環境で夏時間が有効かどうかを確認してください。
_localtime32_s が UTC の 2038 年 1 月 19 日 03 時 14 分 07 秒までの日時を表すのに対し、__time64_t 構造体を使用する _localtime64_s は、UTC の 3000 年 12 月 31 日 23 時 59 分 59 秒までを表すことができます。
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: Daylight Saving Time) の計算を実装する場合には米国の法律に従うことを前提としています。
必要条件
ルーチン |
必須ヘッダー |
---|---|
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