3 个不稳定版本
0.3.1 | 2023年11月16日 |
---|---|
0.3.0 | 2023年11月16日 |
0.2.0 | 2023年9月4日 |
#91 in #chrono
每月 27 次下载
52KB
988 行
chrono systemd.time
此仓库是从 chrono-systemd-time 分支出来的,因为作者已经很久没有更新了。
chrono-systemd-time 是一个库,可以将符合 systemd.time 规范的日期时间戳解析为 chrono 类型。
日期时间格式
支持的日期时间格式包括systemd.time规范中定义的所有格式,以及一些例外。
- 所有时间跨度值必须携带时间单位。
- 不支持时区后缀。
- 不支持星期几前缀。
日期时间戳的格式可以是时间、时间跨度,或者时间和时间跨度的组合。
- 当只给出时间时,返回解析的时间。
- 当只给出时间跨度时,将时间跨度加到或从当前时间(现在)中减去。
- 当给出时间和时间跨度的组合时,将时间跨度加到或从解析的时间中减去。
以下是解析有效日期时间戳的示例,假设现在是2018-06-21 01:02:03
parse_timestamp_tz("2018-08-20 09:11:12.123", Utc) == "2018-08-20T09:11:12.000123Z"
parse_timestamp_tz("2018-08-20 09:11:12", Utc) == "2018-08-20T09:11:12Z"
parse_timestamp_tz("18-08-20 09:11:12 +2m", Utc) == "2018-08-20T09:13:12Z"
parse_timestamp_tz("2018-08-20 + 1h2m3s", Utc) == "2018-08-20T01:02:03Z"
parse_timestamp_tz("18-08-20 - 1h 2m 3s", Utc) == "2018-08-19T22:57:57Z"
parse_timestamp_tz("09:11:12 -1day", Utc) == "2018-06-20T09:11:12Z"
parse_timestamp_tz("09:11:12.123", Utc) == "2018-06-21T09:11:12.000123Z"
parse_timestamp_tz("11:12", Utc) == "2018-06-21T11:12:00Z"
parse_timestamp_tz("now", Utc) == "2018-06-21T01:02:03.203918151Z"
parse_timestamp_tz("today", Utc) == "2018-06-21T00:00:00Z"
parse_timestamp_tz("yesterday -2days", Utc) == "2018-06-18T00:00:00Z"
parse_timestamp_tz("tomorrow +1week", Utc) == "2018-06-29T00:00:00Z"
parse_timestamp_tz("epoch +1529578800s", Utc) == "2018-06-21T11:00:00Z"
parse_timestamp_tz("@1529578800s", Utc) == "2018-06-21T11:00:00Z"
parse_timestamp_tz("now +4h50m", Utc) == "2018-06-21T05:52:03.203918151Z"
parse_timestamp_tz("4h50m left", Utc) == "2018-06-21T05:52:03.203918151Z"
parse_timestamp_tz("+4h50m", Utc) == "2018-06-21T05:52:03.203918151Z"
parse_timestamp_tz("now -3s", Utc) == "2018-06-21T01:02:00.203918151Z"
parse_timestamp_tz("3s ago", Utc) == "2018-06-21T01:02:00.203918151Z"
parse_timestamp_tz("-3s", Utc) == "2018-06-21T01:02:00.203918151Z"
时间
时间的语法由一组关键字和strftime格式组成
"now"
,"epoch"
"today"
,"yesterday"
,"tomorrow"
"%y-%m-%d %H:%M:%S"
,"%Y-%m-%d %H:%M:%S"
"%y-%m-%d %H:%M"
,"%Y-%m-%d %H:%M"
"%y-%m-%d"
,"%Y-%m-%d"
"%H:%M:%S"
"%H:%M"
包含秒组件的strftime时间戳还可以包含微秒组件,由'.'
分隔。
- 省略日期时,默认为今天。
- 省略时间时,默认为00:00:00。
有效时间的示例(假设当前时间为2018-06-21 01:02:03)
"2018-08-20 09:11:12.123" == "2018-08-20T09:11:12.000123"
"2018-08-20 09:11:12" == "2018-08-20T09:11:12"
"18-08-20 09:11:12" == "2018-08-20T09:11:12"
"2018-08-20" == "2018-08-20T00:00:00"
"18-08-20" == "2018-08-20T00:00:00"
"09:11:12" == "2018-06-21T09:11:12"
"09:11:12.123" == "2018-06-21T09:11:12.000123"
"11:12" == "2018-06-21T11:12:00"
"now" == "2018-06-21T01:02:03.203918151"
"epoch" == "1970-01-01T00:00:00"
"today" == "2018-06-21T00:00:00"
"yesterday" == "2018-06-20T00:00:00"
"tomorrow" == "2018-06-22T00:00:00"
时间跨度
时间跨度由以下时间单位的组合构成,以下时间单位被理解
"usec"
,"us"
,"µs"
"msec"
,"ms"
"seconds"
,"second"
,"sec"
,"s"
"minutes"
,"minute"
,"min"
,"m"
"hours"
,"hour"
,"hr"
,"h"
"days"
,"day"
,"d"
"weeks"
,"week"
,"w"
"months"
,"month"
,"M"
(定义为30.44天)"years"
,"year"
,"y"
(定义为365.25天)
时间跨度内的所有组件都将相加。
有效时间跨度的示例
"3hours" == Duration::hours(3)
"2d 5h" == Duration::days(2) + Duration::hours(5)
"1y 10 months" == Duration::years(1) + Duration::months(10)
"30m22s" == Duration::minutes(30) + Duration::seconds(22)
"10m 2s 5m" == Duration::minutes(15) + Duration::seconds(2)
"10d 2 5m" == Duration::days(10) + Duration::minutes(25)
依赖项
~1MB
~18K SLoC