Chrono: Rust 日付・時刻ライブラリ
Chrono は、グレゴリオ暦における正確な日付・時刻操作に必要な全機能を提供することを目指しています:
DateTime型はデフォルトでタイムゾーンを認識し、同時にタイムゾーン非依存の独立型も提供します。- 無効または曖昧な日付・時刻を生成する可能性のある操作は
OptionまたはMappedLocalTimeを返します。 - strftimeにインスパイアされた日付・時刻フォーマット構文による設定可能な解析・フォーマット機能。
Localタイムゾーンはオペレーティングシステムの現在のタイムゾーンで動作します。- 型と操作の実装は合理的な効率性を考慮しています。
- バイナリサイズを制限するため、Chronoはデフォルトでタイムゾーンデータを含みません。完全なタイムゾーンサポートには付属クレート
Chrono-TZまたはtzfileを使用してください。
機能特性
Chrono は様々なランタイム環境とオペレーティングシステムをサポートし、いくつかの有効化・無効化可能な機能を持っています。
デフォルト機能:
alloc:メモリ割り当てに依存する機能(主に文字列フォーマット)を有効化。std:標準ライブラリに依存する機能を有効化。これはallocの上位セットで、標準ライブラリの型とトレイトとの相互運用性を追加します。clock:ローカルタイムゾーン(Local)の読み取り機能を有効化。これはnowの上位セットです。now:システム時刻(now)の読み取り機能を有効化。wasmbind:wasm32ターゲット向けにJS Date APIとのインターフェースを提供。
オプション機能:
serde:serdeによるシリアライズ/デシリアライズを有効化。rkyv:非推奨、rkyv-*機能を使用してください。rkyv-16、rkyv-32、rkyv-64:rkyvによるシリアライズ/デシリアライズを有効化(それぞれ16ビット、32ビット、64ビット整数を使用)。rkyv-validation:bytecheckによるrkyv検証サポートを有効化。arbitrary:Arbitraryクレートを使用して型の任意のインスタンスを構築。unstable-locales:ローカライゼーションを有効化。これにより_localizedサフィックス付きの様々なメソッドが追加されます。
概要
時間差/期間
Chronoは時間スパンの大きさを表すTimeDelta型を提供します。これは秒とナノ秒で表される「正確な」期間であり、日や月などの「名目上の」構成要素は表しません。
TimeDelta型は以前Durationという名前でした(型エイリアスとして引き続き利用可能)。類似のcore::time::Durationとの顕著な違いは、符号付き値であることです。
日付と時刻
Chronoはタイムゾーン内の日付と時刻を表すDateTime型を提供します。
DateTimeはタイムゾーンを認識し、ローカル日付をUTC日付に変換する方法とその逆を定義するTimeZoneオブジェクトから構築する必要があります。よく知られたTimeZone実装は3つあります:
UtcはUTCタイムゾーンを指定します。最も効率的です。Localはシステムのローカルタイムゾーンを指定します。FixedOffsetはUTC+09:00やUTC-10:30などの任意の固定タイムゾーンを指定します。
異なるTimeZone型のDateTimeは別個の型であり混在できませんが、DateTime::with_timezoneメソッドを使用して相互変換できます。
現在の日付と時刻はUTCタイムゾーン(Utc::now())またはローカルタイムゾーン(Local::now())で取得できます。
さらに、独自の日付と時刻を作成することもできます:
フォーマットと解析
フォーマットはformatメソッドで行われ、そのフォーマットは馴染みのあるstrftimeフォーマットと同等です。
デフォルトのto_stringメソッドと{:?}指定子も合理的な表現を提供します。Chronoは一般的なフォーマット用にto_rfc2822とto_rfc3339メソッドも提供します。
Chronoは現在、追加のCライブラリなしでほぼすべての言語での日付フォーマット機能を提供します。この機能はunstable-locales特性で利用可能です:
解析は2つの方法で行えます:
- 標準の
FromStrトレイト(および文字列のparseメソッド)はDateTime<FixedOffset>、DateTime<Utc>、DateTime<Local>値の解析に使用できます。 DateTime::parse_from_strはオフセット付きの日付と時刻を解析し、DateTime<FixedOffset>を返します。
EPOCHタイムスタンプとの変換
UNIXタイムスタンプからDateTime<Utc>を構築するにはDateTime::from_timestamp(seconds, nanoseconds)を使用します。
DateTimeからタイムスタンプ(秒単位)を取得するにはDateTime.timestampを使用します。さらに、追加のナノ秒数を取得するにはDateTime.timestamp_subsec_nanosを使用できます。
制限事項
- 順方向のグレゴリオ暦のみをサポート(より早い日付をサポートするように拡張)。
- 日付型は紀元前後約262,000年までに制限。
- 時刻型はナノ秒精度に制限。
- 閏秒を表現可能だが、Chronoは完全にはサポートしていない。