次の変数があります。
int year = 2013;
int month = 04;
int day = 07;
int hour = 13;
int min = 42;
int sec = 00;
...そして、それらから「エポック」時間、または UNIX 時間を抽出する必要があります。
これは標準 C でどのように行うことができますか? この場合、UNIX 時間は1365342120になります。
次の変数があります。
int year = 2013;
int month = 04;
int day = 07;
int hour = 13;
int min = 42;
int sec = 00;
...そして、それらから「エポック」時間、または UNIX 時間を抽出する必要があります。
これは標準 C でどのように行うことができますか? この場合、UNIX 時間は1365342120になります。
どうですか:
struct tm tm = {
.tm_sec = sec,
.tm_min = min,
...
};
time_t t = mktime(&tm);
printf("%ju\n", (uintmax_t) t);
Mppl が指摘しているように、これを使用する前に、次の癖に注意する必要がありますstruct tm
。
tm_mon
は January からの月として定義されているため、月から 1を引く必要がありますtm_year
は 1900 年からの年として定義されているため、年から 1900を引く必要があります。よりペダンティックなサイドノートでは、t を整数に変換すると、1970 年以降の秒数が自動的に得られるという保証はありません。多くのシステムで動作しますが、標準ではこれが規定されていません。
標準に夢中になりたい場合は、別のtime_t
表現1970
を作成してdifftime
から、2つの間で実行できます。違いは、単純な正直なものとして得られますdouble
。