Chrono旨在提供在公曆格里高利曆中執行正確日期和時間操作所需的所有功能:
DateTime
類型預設是時區感知的,同時提供單獨的時區無關類型。Option
或MappedLocalTime
。Local
時區可以與操作系統的當前時區一起工作。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 crate構造類型的任意實例。unstable-locales
:啟用本地化。這添加了帶有_localized
後綴的各種方法。Chrono提供了TimeDelta
類型來表示時間跨度的大小。這是一個以秒和納秒表示的"精確"持續時間,不表示如天或月等"名義"組件。
TimeDelta
類型以前命名為Duration
(仍作為類型別名提供)。與類似的core::time::Duration
的一個顯著區別是它是有符號值而不是無符號值。
Chrono提供了DateTime
類型來表示時區中的日期和時間。
DateTime
是時區感知的,必須從TimeZone
對象構造,該對象定義了本地日期如何轉換為UTC日期並返回。有三個眾所周知的TimeZone
實現:
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
特性下提供:
解析可以通過兩種方法完成:
FromStr
特性(以及字串上的parse
方法)可用於解析DateTime<FixedOffset>
、DateTime<Utc>
和DateTime<Local>
值。DateTime::parse_from_str
解析帶偏移量的日期和時間,並返回DateTime<FixedOffset>
。使用DateTime::from_timestamp(seconds, nanoseconds)
從UNIX時間戳構建DateTime<Utc>
。
使用DateTime.timestamp
從DateTime
獲取時間戳(以秒為單位)。此外,您可以使用DateTime.timestamp_subsec_nanos
獲取額外的納秒數。