localtime、_localtime32、_localtime64
時刻値を現地のタイム ゾーンに合わせて変換します。これらの関数のセキュリティを強化したバージョンについては、「localtime_s、_localtime32_s、_localtime64_s」を参照してください。
struct tm *localtime(
const time_t *timer
);
struct tm *_localtime32(
const __time32_t *timer
);
struct tm *_localtime64(
const __time64_t *timer
);
パラメーター
- timer
格納されている時刻へのポインター。
戻り値
結果として得られた構造体へのポインターを返します。また、関数に渡された日付が次のいずれかの場合は NULL を返します。
1970 年 1 月 1 日の 0 時以前。
世界協定時刻 (UTC: Coordinated Universal Time) の 2038 年 1 月 19 日 03 時 14 分 07 秒以降 (_time32 と time32_t を使用する場合)。
UTC の 3000 年 12 月 31 日 23 時 59 分 59 秒以降 (_time64 と __time64_t を使用する場合)。
_localtime32 が UTC の 2038 年 1 月 19 日 03 時 14 分 07 秒までの日時を表すのに対し、__time64_t 構造体を使用する _localtime64 は、UTC の 3000 年 12 月 31 日 23 時 59 分 59 秒までを表すことができます。
localtime は _localtime64 に評価される time_t は__time64_t と等価ですがインライン関数であり。コンパイラに time_t を従来の 32 ビット time_t として解釈させるためには、_USE_32BIT_TIME_T を定義します。この定義を行うことにより、localtimeは _localtime32 に評価されます。この方法はお勧めしません。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 関数は、time_t 型の値として格納されている時刻を変換し、その結果を tm 型の構造体に格納します。long 型の timer 値は、UTC の 1970 年 1 月 1 日 00 時 00 分 00 秒からの経過秒数を表します。通常、この値は time 関数で取得されます。
32 ビット バージョンおよび 64 ビット バージョンの gmtime、mktime、mkgmtime、localtime の各関数はすべて、1 スレッドあたり 1 つの tm 構造体を使用して変換を行います。これらのルーチンを呼び出すたびに、前の呼び出しの結果は破棄されます。
localtime 関数は、ユーザーが最初に TZ グローバル環境変数を設定している場合、時刻を現地のタイム ゾーンに合わせて修正します。TZ が設定されると、他の 3 つの環境変数 (_timezone、_daylight、および _tzname) が自動的に設定されます。TZ 変数が設定されていない場合、localtime 関数は [コントロール パネル] の [日付と時刻] で指定されているタイム ゾーンの情報を取得しようとします。タイム ゾーン情報を取得できない場合、既定では、太平洋タイム ゾーンを表す PST8PDT が使用されます。これらの変数については、「_tzset」を参照してください。TZ は、Microsoft 拡張機能であり、localtime の ANSI 規格には含まれていません。
[!メモ]
対象の環境で夏時間が有効かどうかを確認してください。
これらの関数では、パラメーターの検証が行われます。timer が null ポインターの場合またはタイマー値が負の場合、「パラメーターの検証」に説明されているように、これらの関数は無効なパラメーター ハンドラーを呼び出します。実行の継続が許可された場合、関数は NULL を返し、errno を EINVAL に設定します。
必要条件
ルーチン |
必須ヘッダー |
---|---|
localtime |
<time.h> |
_localtime32 |
<time.h> |
_localtime64 |
<time.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_localtime.cpp
// compile with: /W3
/* This program uses _time64 to get the current time
* and then uses localtime64() 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;
_time64( &long_time ); // Get time as 64-bit integer.
// Convert to local time.
newtime = _localtime64( &long_time ); // C4996
// Note: _localtime64 deprecated; consider _localetime64_s
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;
char buff[30];
asctime_s( buff, sizeof(buff), newtime );
printf( "%.19s %s\n", buff, am_pm );
}
同等の .NET Framework 関数
参照
関連項目
ctime、_ctime32、_ctime64、_wctime、_wctime32、_wctime64