1 个不稳定版本
0.1.0 | 2024年2月19日 |
---|
#368 在 日期和时间
39KB
1K SLoC
从 chrono::Duration
生成用户友好的字符串,例如 "1天,5小时和20分钟"。
可以显示年和月,但它们需要一些日期作为参考点,因为年和月的确切长度可能会有所不同。
它相当可配置。
公共 API 很受争议,并可能发生变化。
使用方法
let text = stringify_interval::without_date(
chrono::Duration::seconds(1_234_567),
&DisplayConfigConstant::default(),
&Text::default(),
);
assert_eq!(text, Ok(String::from("14 days, 6 hours and 56 minutes")));
配置
每个单独的单位都可以设置一系列值,以确定何时显示。这允许它执行像自动省略秒数(对于长时间间隔)或除非间隔包含5年,否则不提及年这样的操作。当单位被省略时,间隔会四舍五入到最接近的最小单位的倍数。
每个单独的单位还可以用零填充,或者即使值为0也设置为显示。
此外,所有字符串元素都可以用 Text
结构体替换。这允许进行格式更改和一定程度本地化。对于每个单位,一个 ThresholdMap
允许设置对于哪个数字范围应该显示哪个文本。
Text
的默认值如下
Text {
years: ThresholdMap::from_iter("years", [(1, "year"), (2, "years")]).unwrap(),
months: ThresholdMap::from_iter("months", [(1, "month"), (2, "months")]).unwrap(),
weeks: ThresholdMap::from_iter("weeks", [(1, "week"), (2, "weeks")]).unwrap(),
days: ThresholdMap::from_iter("days", [(1, "day"), (2, "days")]).unwrap(),
hours: ThresholdMap::from_iter("hours", [(1, "hour"), (2, "hours")]).unwrap(),
minutes: ThresholdMap::from_iter("minutes", [(1, "minute"), (2, "minutes")]).unwrap(),
seconds: ThresholdMap::from_iter("seconds", [(1, "second"), (2, "seconds")]).unwrap(),
joiner: ", ".into(),
final_joiner: Some(" and ".into()),
spacer: " ".into(),
}
依赖项
~1.3–2MB
~36K SLoC