关于
日期/时间库
另请参阅 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小时制中的am 或pm 。 |
%p |
AM |
12小时制中的AM 或PM 。 |
%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 )。 |
%% |
字面百分号。 |