[2] 
[[C言語]]の [CODE[time.h]] の[[構造体]]
[DFN[[CODE[tm]]]]
は、[[日時]]を表します。

[10] 
[[Perl]] では[[リスト]]で表します。[SRC[>>9]] 

* 仕様書

[REFS[
- [1] [CITE[ISO/IEC 9899:yyyy - n2310.pdf]] ([TIME[2018-11-12 09:13:34 +09:00]]) <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf#page=287>
- [9] [CITE@en-gb[localtime - perldoc.perl.org]] ([TIME[2017-11-06 02:49:32 +09:00]]) <https://perldoc.perl.org/functions/localtime.html>
]REFS]

* 意味

[3] [CODE[tm]] は、 [[calendar time]] の各 component を保持します。
すなわち [DFN[broken-down time]] を表します。 [SRC[>>1]]

* メンバー

[4] 次のメンバーを持ちます。 [SRC[>>1]]

[FIG(list members)[

: [CODE[tm_sec]] : 
[[分]]からの[[秒]] [CODE[int]] [ [N[0]], [N[60]] ]
([N[60]] は[[正閏秒]])
: [CODE[tm_min]] :
[[時]]からの[[分]] [CODE[int]] [ [N[0]], [N[59]] ]
: [CODE[tm_hour]] :
[RUBYB[[[深夜]]]@en[midnight]]からの[[時]] [CODE[int]] [ [N[0]], [N[23]] ]
: [CODE[tm_mday]] : 
[[月]]の[[日]] [CODE[int]] [ [N[1]], [N[31]] ]
: [CODE[tm_mon]] :
[[January]] からの[[月]] [CODE[int]] [ [N[0]], [N[11]] ]
: [CODE[tm_year]] :
[[1900年からの年][西暦1900年暦]] [CODE[int]]
: [CODE[tm_wday]] :
[[Sunday]] からの[[日]] [CODE[int]] [ [N[0]], [N[6]] ]
: [CODE[tm_yday]] :
[[January]] 1日からの[[日]] [CODE[int]] [ [N[0]], [N[365]] ]
: [CODE[tm_isdst]] :
[[DST]] フラグ [CODE[int]] : 
[[DST]] 中は[[正]]、
[[DST]] 外は [N[0]]、
不明なら[[負]]。
[CODE[mktime]] では、
[[正]]か [N[0]] なら [[DST]] 中・外の[[時刻]]とみなして解釈しようとし、
[[負]]なら指定[[時刻]]が [[DST]] 中かどうか判定しようとします。

]FIG]

[7] [CODE[mktime]] は[[値域]]外の値が与えられても受け入れ、
適切な値に置き換えようとします。 [SRC[>>1]]

* 文脈

[5] [[C言語]]と [[Perl]] の
[CODE[gmtime]], [CODE[localtime]] は [CODE[time_t]] を [CODE[tm]]
に変換します。

[8] [[C言語]]の [CODE[mktime]] は [CODE[tm]] を受け取り [CODE[time_t]] を返します。

[13] [[Perlモジュール]]の [CODE[Time::Local]] は
[CODE[tm]] [[リスト]]を受け取り [CODE[time_t]] を返します。
[[2桁西暦年号の解釈]]の特殊な規則があるため
[CODE[gmtime]]/[CODE[localtime]] の完全な逆演算にはなっていません。

[REFS[
- [12] [CITE@en[houseabsolute/Time-Local: Efficiently compute time from local and GMT time]] ([TIME[2019-04-21 11:01:53 +09:00]]) <https://github.com/houseabsolute/Time-Local>
]REFS]

* メモ

[FIG(quote)[
[FIGCAPTION[
[14] [CITE@ja[Date (Java Platform SE 8 )]]
([TIME[2019-04-21 15:27:39 +09:00]])
<https://docs.oracle.com/javase/jp/8/docs/api/java/util/Date.html>
]FIGCAPTION]

> 年、月、日、時間、分、秒の値を受け取るか返すクラスDateのすべてのメソッドにおいて、次の表示が使用されます。
> 年yは整数y - 1900によって表されます。
> 月は0 - 11の整数で表されます。0は1月、1は2月、そして11は12月を意味します。
> 日(月の何日目)は通常どおり1 - 31の整数で表されます。
> 時間は0 - 23の整数で表されます。このため、深夜零時から午前1時までの時間は時刻0であり、正午から午後1時までの時間は時刻12を意味します。
> 分は通常どおり0 - 59の整数で表されます。
> 秒は0 - 61の整数で表されます。値60および61は、うるう秒のためにだけ、そして実際にうるう秒を正確に追跡するJavaの実装だけで発生します。現在使われているうるう秒の算出法では、2回のうるう秒が同じ分に発生することはきわめてまれですが、この仕様はISO Cによる日付および時刻の規約に従います。

]FIG]
