如何确定时间戳是否在工作时间内?

时间:2011-05-28 17:52:24

标签: java timestamp

给定任何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。

5 个答案:

答案 0 :(得分:4)

我想我明白你想要什么。如果是在UTC时间上午8点到下午4点之间,您想要测试任何一天。采取时间戳模型24 * 3600。这将为您提供当天经过的秒数。然后你只需比较它在8 * 3600和16 * 3600之间。如果你需要处理时区,事情会变得更加复杂。

答案 1 :(得分:2)

如果我理解正确,您只需要将日期标准化为一些常见值。创建三个日历实例 - 一个包含您的时间,但是日,月和年设置为零,两个包含时间范围的开始和结束,其他字段也为零。然后,您可以使用Calendar.after()和Calendar.before()来查看日期是否在范围内。

答案 2 :(得分:1)

你的unix时间戳是绝对时间。你的时间框架是相对的。您需要某种时区信息才能解决此问题。几分钟前我才answered some of this for PostgreSQL。希望这篇文章有用。

答案 3 :(得分:1)

根据您的时间戳(以秒为单位)和所需的时区,Jodatime为您提供一个小时,可以引导您进行简单的整数范围检查。

new org.joda.time.DateTime(timestamp*1000L, zone).getHourOfDay()

使用java.util。*会更困难。

答案 4 :(得分:0)

将范围的开头转换为unix时间戳,将范围的结尾转换为unix tmestamp,然后进行简单的整数检查。