How to determine if a timestamp is within working hours?
如果任何unix时间戳(即1306396801)转换为26.05.2011 08:00:01,我如何确定这是否在给定的时间范围内(即08:00:00和16:00:00)?
这需要在任何一天工作。我只是想知道这个时间戳是否在给定的时间间隔内,在任何未来(或过去)日,日期都不重要。我不在乎是在25日或26日,只要在08:00到16:00之间。
我正在寻找一个java解决方案,但任何有效的伪代码都可以,我只是转换它。
到目前为止,我的尝试已经将它转换为java日历,并读出小时/分钟/秒的值并进行比较,但这只是开辟了一大堆蠕虫。如果我想要的时间间隔是16.30,我不能只检查tsHour> frameStartHour&& tsMin> frameStartMin,因为这将丢弃任何时间戳,其中一分钟> 30。
谢谢你看这个:)
澄清。
我只使用和参考UTC时间,我的时间戳是UTC,我想要的范围是UTC。
我想我明白你想要什么。如果是在UTC时间上午8点到下午4点之间,您想要测试任何一天。采取时间戳模型24 * 3600。这将为您提供当天经过的秒数。然后你只需比较它在8 * 3600和16 * 3600之间。如果你需要处理时区,事情会变得更加复杂。
如果我理解正确,您只需要将日期标准化为一些共同的值。创建三个日历实例 - 一个包含您的时间,但是日,月和年设置为零,两个包含时间范围的开始和结束,其他字段也为零。然后,您可以使用Calendar.after()和Calendar.before()来查看日期是否在范围内。
给定您的时间戳(以秒为单位)和所需的时区,Jodatime为您提供一个小时,可以引导您进行简单的整数范围检查。
1 | new org.joda.time.DateTime(timestamp*1000L, zone).getHourOfDay() |
使用java.util。*更加困难。
你的unix时间戳是绝对时间。你的时间框架是相对的。您需要某种时区信息才能解决此问题。几分钟前我刚刚为PostgreSQL回答了一些问题。希望这篇文章有用。
将范围的开头转换为unix时间戳,将范围的结尾转换为unix tmestamp,然后进行简单的整数检查。