gpt4 book ai didi

rust - 如何测试 chrono::DateTime 是否在一天中的特定时间?

转载 作者:行者123 更新时间:2023-11-29 08:07:39 24 4
gpt4 key购买 nike

我想将当前本地时间与固定时间范围进行比较,但我目前的解决方案似乎比我预期的更难。

我可以构造一个 chrono::DateTime<Local>Local::now() .然后我可以费力地找出是否 now位于特定时间范围内,如下所示:

let current_hour = now.hour();
let current_minute = now.minute();

// see if `now` lies between 06:00 and 23:00
current_hour >= 6 && current_hour < 23

// note the inelegance of the syntax and the potential for fencepost errors

如果我想检查 06:12–23:15 的范围,问题会变得更糟,因为我必须检查小时是否等于 6,然后检查分钟是否大于 12,然后检查 — zzzzz ...

太无聊了。我可以尝试用 parse_from_rfc2822 表示字符串,但我必须先发出当前日期,然后在一天中的时间进行编辑,然后检查解析错误,现在我又要 sleep 了。

我想我只是在阅读 chrono documentation错误的。如果我要实现这个库,我会尝试构建一个 TimeOfDay<Local>实现 Ord 的数据类型,从而允许惯用范围检查。我认为它已经在某个地方了,我只是想念它。

最佳答案

DateTime 对象有一个名为 time() 的函数,它返回一个 NaiveTime表示一天中时间的对象。 NaiveTime 实现了 PartialOrd,并且有一个工厂函数 from_hms(hour, min, sec) .使用 from_hms,您可以创建上限和下限 NaiveTime,然后使用标准运算符进行比较。

let low = NaiveTime::from_hms(6, 12, 0);
let high = NaiveTime::from_hms(23, 15, 0);
let time_of_day = Local::now().time();

if (time_of_day > low) && (time_of_day < high) {
// do stuff...
} else {
// do something else...
};

Playground link for completeness.

关于rust - 如何测试 chrono::DateTime<Local> 是否在一天中的特定时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com