我想将当前本地时间与一个恒定的时间范围进行比较,但我当前的解决方案似乎比我预期的要困难。
我可以用Local::now()构建一个chrono::DateTime<Local>。然后,我可以像这样费力地找出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表示字符串,但是我必须首先发出当前日期,然后在一天中的时间内进行编辑,然后检查解析错误,现在我又睡着了。
我想我只是读错了chrono documentation。如果我要实现这个库,我会尝试构建一个实现Ord的TimeOfDay<Local>数据类型,从而允许惯用的范围检查。我想它已经在某个地方了,我只是错过了它。
发布于 2018-02-18 07:58:22
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...
};https://stackoverflow.com/questions/48846670
复制相似问题