这包括两个部分:首先计算开始日期。然后计算经过的时间。对于第二部分,我在这里找到了一些好的建议:Calculate elapsed time in Java / Groovy
然而,第一部分对我来说是个问题,下面是它的工作原理:用户指定时间跨度从一个小时值(00到23)开始,我没有任何类型的起始日期/时间对象-只有一个整数小时,我需要从这个开始计算起始日期(然后计算经过的时间)。
如果开始时间大于当前时间,则为前一天。但是,为了从中获取实际开始日期,我可能需要考虑月份和年份的界限,以及闰年和夏令时的变化。肯定有人已经解决了这样的问题。(我认为这可能相当复杂。)是否有一个经过验证的解决方案可以让我计算出需要多少时间(以秒为单位)从一天中的给定小时(00到24)到现在实际经过的时间?(开始时间将始终假定为整点。)
4条答案
按热度按时间inb24sb21#
首先,我建议使用Joda Time API,在我看来,它是Java可用的最好的日期/时间API。
接下来,你需要计算出在各种极端情况下应该做什么。特别是,假设用户输入“1”,而你正在进行夏令时转换。1am可能发生了两次(如果时间从夏令时向后转换到1:58、1:59、1:00、1:01),或者根本没有发生(如果时间从夏令时向前转换到12:58、12:59、2:00)。你需要计算出在每种情况下应该做什么--记住,这意味着你也知道时区。
一旦你解决了这个问题,它可能不会太难。使用Joda Time,你可以使用
withHourOfDay
方法从一个时间到另一个时间,设置时间的一个组成部分-同样,如果你需要,也有简单的API来增加或减去一天。然后你可以非常容易地计算出两个DateTime
值之间的时间-同样,Joda Time提供了你需要的一切。下面是一个示例,它不尝试对DST过渡做任何事情,但它是一个很好的起点:
7kqas0il2#
Java.时间
accepted answer提供了一个使用Joda-Time API的解决方案,Joda-Time API可能是当时Java中最好的第三方日期时间API。2014年3月,modern date-time API作为Java 8标准库的一部分发布。请注意Home Page of Joda-Time上的以下消息:
Joda-Time是Java SE 8之前的Java事实上的标准日期和时间库。现在要求用户迁移到
java.time
(JSR-310)。使用
java.time
(现代日期-时间API)的解决方案:示例运行的输出:
ONLINE DEMO
从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
pxiryf3j3#
假设
startHour
是用户给定的(假设它在0-23范围内),现在你可以这样开始:pokxtpni4#
使用Joda-Time类。您可以执行以下操作: