std::mktime
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <ctime> で定義
|
||
std::time_t mktime( std::tm* time ); |
||
ローカルカレンダー時刻を time_t のオブジェクトとしてのエポックからの経過時間に変換します。 time->tm_wday および time->tm_yday は無視されます。 time 内の値は通常の範囲外でも構いません。
time->tm_isdst を負の値にすると mktime は夏時間が実施中かどうかの判定を試みます。
変換に成功した場合は、 time オブジェクトが変更されます。 time のすべてのフィールドがその適切な範囲に更新されます。 time->tm_wday および time->tm_yday は他のフィールドで利用可能な情報を使用して再計算されます。
引数
| time | - | 変換するローカルカレンダー時刻を表す std::tm オブジェクトを指すポインタ |
戻り値
成功した場合は std::time_t オブジェクトとしてのエポックからの経過時間。 time が std::time_t オブジェクトとして表せなければ -1。
ノート
std::tm オブジェクトが std::get_time または POSIX の strptime から取得された場合、 tm_isdst の値は不定であり、 mktime を呼ぶ前に明示的に設定する必要があります。
例
100ヶ月前の時刻を表示します。
Run this code
#include <iostream>
#include <iomanip>
#include <ctime>
#include <stdlib.h>
int main()
{
setenv("TZ", "/usr/share/zoneinfo/America/New_York", 1); // POSIX-specific
std::time_t t = std::time(nullptr);
std::tm tm = *std::localtime(&t);
std::cout << "Today is " << std::put_time(&tm, "%c %Z")
<< " and DST is " << (tm.tm_isdst ? "in effect" : "not in effect") << '\n';
tm.tm_mon -= 100; // tm_mon is now outside its normal range
std::mktime(&tm); // tm_dst is not set to -1; today's DST status is used
std::cout << "100 months ago was " << std::put_time(&tm, "%c %Z")
<< " and DST was " << (tm.tm_isdst ? "in effect" : "not in effect") << '\n';
}
出力:
Today is Fri Apr 22 11:40:36 2016 EDT and DST is in effect
100 months ago was Sat Dec 22 10:40:36 2007 EST and DST was not in effect
関連項目
| エポックからの経過時間を現地時間で表されるカレンダー時刻に変換します (関数) | |
mktime の C言語リファレンス
| |