26 个稳定版本

6.2.0 2024年8月22日
6.0.1 2024年7月25日
5.8.2 2024年7月23日
5.8.1 2023年10月21日
4.1.2 2022年7月23日

#214 in 日期和时间

Download history 3/week @ 2024-05-20 6/week @ 2024-06-03 4/week @ 2024-06-10 349/week @ 2024-07-22 157/week @ 2024-07-29 7/week @ 2024-08-05 7/week @ 2024-08-12

520 每月下载量
用于 2 crate

MIT 许可证

40KB
325

关于

日期/时间库

另请参阅 API 文档dtg crate。

示例

use chrono::{TimeZone, Utc};
use dtg_lib::{tz, Dtg, Format};

let epoch = 1658448142;
let nanoseconds = 936196858;
let rfc_3339 = "2022-07-22T00:02:22Z";
let default_utc = "Fri 22 Jul 2022 00:02:22 UTC";
let default_mt = "Thu 21 Jul 2022 18:02:22 MDT";
let x = "Xg6L02M";
let a_utc = format!("{epoch}.000000000\n{rfc_3339}\n{default_utc}\n{default_utc}");
let a_mt = format!("{epoch}.000000000\n{rfc_3339}\n{default_utc}\n{default_mt}");
let day_of_week_utc = "Friday";
let day_of_week_mt = "Thursday";
let tz_utc = tz("UTC").ok();
let tz_mt = tz("MST7MDT").ok();
let default_fmt = Some(Format::default());
let day_of_week_fmt = Some(Format::custom("%A"));

// Create Dtg

let dtg_1_str = format!("{}", epoch);

let dtg_1_ts = Dtg::from(&dtg_1_str).unwrap();
let dtg_1_dt = Dtg::from_dt(&Utc.timestamp(epoch, 0));
let dtg_1_x = Dtg::from_x(x).unwrap();

assert_eq!(dtg_1_ts, dtg_1_dt);
assert_eq!(dtg_1_dt, dtg_1_x);
assert_eq!(dtg_1_x, dtg_1_ts);

// Create Dtg with nanoseconds

let dtg_2_str = format!("{}.{}", epoch, nanoseconds);

let dtg_2_ts = Dtg::from(&dtg_2_str).unwrap();
let dtg_2_dt = Dtg::from_dt(&Utc.timestamp(epoch, nanoseconds));

assert_eq!(dtg_2_ts, dtg_2_dt);

// Default format

assert_eq!(dtg_1_ts.default(&None), default_utc);
assert_eq!(dtg_1_ts.default(&tz_utc), default_utc);
assert_eq!(dtg_1_ts.default(&tz_mt), default_mt);

assert_eq!(dtg_1_ts.format(&default_fmt, &None), default_utc);
assert_eq!(dtg_1_ts.format(&default_fmt, &tz_utc), default_utc);
assert_eq!(dtg_1_ts.format(&default_fmt, &tz_mt), default_mt);

// RFC 3339 format

assert_eq!(dtg_1_ts.rfc_3339(), rfc_3339);
assert_eq!(dtg_1_ts.format(&None, &None), rfc_3339);

// "x" format

assert_eq!(dtg_1_ts.x_format(), x);
assert_eq!(dtg_1_ts.format(&Some(Format::X), &None), x);

// "a" format

assert_eq!(dtg_1_ts.a_format(&None), a_utc);
assert_eq!(dtg_1_ts.a_format(&tz_utc), a_utc);
assert_eq!(dtg_1_ts.a_format(&tz_mt), a_mt);

assert_eq!(dtg_1_ts.format(&Some(Format::A), &None), a_utc);
assert_eq!(dtg_1_ts.format(&Some(Format::A), &tz_utc), a_utc);
assert_eq!(dtg_1_ts.format(&Some(Format::A), &tz_mt), a_mt);

// Custom format

assert_eq!(dtg_1_ts.format(&day_of_week_fmt, &None), day_of_week_utc);
assert_eq!(dtg_1_ts.format(&day_of_week_fmt, &tz_mt), day_of_week_mt);

格式

日期指定符

指定. 示例 描述
%Y 2001 完整的协历年份,用零填充至4位。
%C 20 协历年份除以100,用零填充至2位。
%y 01 协历年份对100取模,用零填充至2位。
%m 07 月份(01--12),用零填充至2位。
%b Jul 缩写月份名称。总是3个字母。
%B July 完整月份名称。解析时也接受相应的缩写。
%h Jul %b 相同。
%d 08 日数(01--31),用零填充至2位。
%e 8 %d 相同,但用空格填充。与 %_d 相同。
%a Sun 缩写星期名称。总是3个字母。
%A Sunday 完整星期名称。解析时也接受相应的缩写。
%w 0 星期日=0,星期一=1,...,星期六=6。
%u 7 星期一=1,星期二=2,...,星期日=7。(ISO 8601)
%U 28 从星期日开始的一周编号(00--53),用零填充至2位。
%W 27 %U 相同,但第1周从该年的第一个星期一开始。
%G 2001 %Y 相同,但使用 ISO 8601 周日期中的年份。
%g 01 %y 相同,但使用 ISO 8601 周日期中的年份。
%V 27 %U 相同,但使用 ISO 8601 周日期中的周数(01--53)。
%j 189 年份中的天数(001--366),用零填充至3位。
%D 07/08/01 月-日-年格式。与 %m/%d/%y 相同。
%x 07/08/01 本地日期表示(例如,12/31/99)。
%F 2001-07-08 年月日格式(ISO 8601)。与%Y-%m-%d相同。
%v 8-Jul-2001 日月年格式。与%e-%b-%Y相同。

时间指定符

指定. 示例 描述
%H 00 小时数(00--23),用零填充至两位数。
%k 0 %H相同,但用空格填充。与%_H相同。
%I 12 12小时制的小时数(01--12),用零填充至两位数。
%l 12 %I相同,但用空格填充。与%_I相同。
%P am 12小时制中的ampm
%p AM 12小时制中的AMPM
%M 34 分钟数(00--59),用零填充至两位数。
%S 60 秒数(00--60),用零填充至两位数。
%f 026490000 自上一个整秒以来的分数秒(以纳秒为单位)。
%.f .026490 类似于.%f,但左对齐。这些都会消耗开头的点。
%.3f .026 类似于.%f,但左对齐,固定长度为3。
%.6f .026490 类似于.%f,但左对齐,固定长度为6。
%.9f .026490000 类似于.%f,但左对齐,固定长度为9。
%3f 026 类似于%.3f,但没有开头的点。
%6f 026490 类似于%.6f,但没有开头的点。
%9f 026490000 类似于%.9f,但没有开头的点。
%R 00:34 小时分钟格式。与%H:%M相同。
%T 00:34:60 小时分钟秒格式。与%H:%M:%S相同。
%X 00:34:60 本地时间表示(例如,23:13:48)。
%r 12:34:60 AM 12小时制中的小时分钟秒格式。与%I:%M:%S %p相同。

时区指定符

指定. 示例 描述
%Z ACST 本地时区名称。在解析过程中跳过所有非空白字符。
%z +0930 从本地时间到UTC的偏移量(UTC为+0000)。
%:z +09:30 %z相同,但有冒号。
%#z +09 仅解析:%z相同,但允许分钟缺失或存在。

日期和时间指定符

指定. 示例 描述
%c Sun Jul8 00:34:60 2001 本地的日期和时间(例如,Thu Mar 3 23:05:25 2005)。
%+ 2001-07-08T00:34:60.026490+09:30 ISO 8601 / RFC 3339日期和时间格式。
%s 994518299 UNIX时间戳,自1970-01-01 00:00 UTC以来的秒数。

特殊指定符

指定. 描述
%t 字面制表符(\t)。
%n 字面换行符(\n)。
%% 字面百分号。

依赖项

~2.5–7.5MB
~41K SLoC