7 个版本
0.2.1 | 2024 年 4 月 10 日 |
---|---|
0.2.0 | 2019 年 9 月 24 日 |
0.1.0 | 2019 年 1 月 3 日 |
0.0.4 | 2017 年 10 月 11 日 |
0.0.3 | 2017 年 8 月 10 日 |
#48 在 日期和时间
72KB
946 行
Timespan Library for Rust 🦀
使用方法
将以下内容放入您的 Cargo.toml
[dependencies]
timespan = "^0"
或者,如果您需要 Serde 支持,可以按照以下方式包含它
[dependencies]
timespan = { version = "^0", features = ["with-serde"] }
概述
日期和时间跨度
Timespan
可以用来创建由 chrono::DateTime
组成的时区感知跨度。
目前,DateTimeSpan
支持 chrono::Utc
、chrono::Local
和 chrono::FixedOffset
时区的序列化和反序列化。对于其他时区类型的支持,请参阅文档。
当 with-serde
功能启用时,DateTimeSpan
支持使用 serde
进行序列化和反序列化。
use timespan::DateTimeSpan;
use chrono::Utc;
let a: DateTimeSpan<Utc> = "2017-01-01T15:10:00 +0200 - 2017-01-02T09:30:00 +0200"
.parse().unwrap();
assert!(
format!("{}", a.format("{start} to {end}", "%c", "%c")) ==
"Sun Jan 1 13:10:00 2017 to Mon Jan 2 07:30:00 2017"
);
单个日期跨度
可以使用 DateSpan
创建由 chrono::Date
组成的时区感知跨度。
目前,DateSpan
不支持从字符串进行序列化和反序列化。
use timespan::DateSpan;
use chrono_tz::Europe::Paris;
let a = DateSpan::from_utc_datespan(
&"1789-06-17 - 1799-11-10".parse().unwrap(),
&Paris,
);
let f = a.format(
"The french revolution lasted from the {start} to the {end}.",
"%eth of %B %Y",
"%eth of %B %Y",
);
assert!(
format!("{}", f) ==
"The french revolution lasted from the 17th of June 1789 to the 10th of November 1799."
);
天真日期和时间跨度
NaiveDateSpan
、NaiveTimeSpan
和 NaiveDateTimeSpan
都不具备时区感知,可以用于简单的时间跨度。
所有天真跨度都完全支持从字符串进行序列化和反序列化。
当 with-serde
功能启用时,所有天真跨度都支持使用 serde
进行序列化和反序列化。
use timespan::NaiveDateSpan;
let a: NaiveDateSpan = "2017-04-15 - 2017-08-15".parse().unwrap();
let b = NaiveDateSpan::parse_from_str(
"15.04.17 - 15.08.17",
"{start} - {end}",
"%d.%m.%y", "%d.%m.%y"
).unwrap();
let f = a.format("from {start} to {end}", "%m/%d", "%m/%d");
assert!(format!("{}", f) == "from 04/15 to 08/15");
assert!(a == b);
use timespan::NaiveTimeSpan;
let a: NaiveTimeSpan = "17:30:00 - 19:15:00".parse().unwrap();
let b = NaiveTimeSpan::parse_from_str(
"05.30 PM - 07.15 PM",
"{start} - {end}",
"%I.%M %P", "%I.%M %P"
).unwrap();
let f = a.format("from {start} to {end}", "%R", "%R");
assert!(format!("{}", f) == "from 17:30 to 19:15");
assert!(a == b);
use timespan::NaiveDateTimeSpan;
let a: NaiveDateTimeSpan = "2017-02-20T11:30:00 - 2017-02-23T18:00:00".parse().unwrap();
let b = NaiveDateTimeSpan::parse_from_str(
"02/20/17 11.30 am - 02/23/17 06.00 pm",
"{start} - {end}",
"%D %I.%M %p", "%D %I.%M %p"
).unwrap();
let f = a.format("from {start} to {end}", "%R on %A", "%R on %A");
assert!(format!("{}", f) == "from 11:30 on Monday to 18:00 on Thursday");
assert!(a == b);
如何运行示例
为了从 example
文件夹中运行一个示例,请执行以下命令。
$ cargo run --example <name>
convert
示例
将 从 10.30 到 14.00
转换为 10:30 - 14:00
$ cargo run --example convert -- "from 10.30 to 14.00" \
"from {start} to {end}" "%H.%M" "%H.%M" \
"{start} - {end}" "%R" "%R"
duration
示例
获取时间跨度的持续时间 从 10.30 到 14.00
$ cargo run --example duration -- "from 10.30 to 14.00" \
"from {start} to {end}" "%H.%M" "%H.%M"
contains
示例
获取 11.20
是否包含在时间跨度 从 10.30 到 14.00
$ cargo run --example contains -- "from 10.30 to 14.00" "11.20" \
"from {start} to {end}" "%H.%M" "%H.%M" "%H.%M"
许可证
本项目采用 GPL-v3 许可证 - 详细信息请见 LICENSE 文件。
依赖
约 3–4.5MB
约 75K SLoC