给定任何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。
答案 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,然后进行简单的整数检查。