Java 如何使用JodaTime以毫秒为单位获取两个日期之间的时差
我将设计一个应用程序,在其中我需要得到两个日期之间的确切时差。例:Java 如何使用JodaTime以毫秒为单位获取两个日期之间的时差,java,jodatime,Java,Jodatime,我将设计一个应用程序,在其中我需要得到两个日期之间的确切时差。例: Date1:31/05/2011 12:54:00 Date2:31/05/2011 13:54:00 我尝试使用getTime(),但没有得到确切的结果 上述输入的预期输出为3600000(60*60*1000)毫秒,但我得到的是46800000(13*60*60*1000) 当我浏览不同的java论坛时,人们建议使用JodaTime 我仍然无法得到确切的结果 我工作的时区是伦敦(GMT)。退房 创建一个秒数,该秒数表示 两
Date1:31/05/2011 12:54:00
Date2:31/05/2011 13:54:00
我尝试使用getTime()
,但没有得到确切的结果
上述输入的预期输出为3600000
(60*60*1000)毫秒,但我得到的是46800000
(13*60*60*1000)
当我浏览不同的java论坛时,人们建议使用JodaTime
我仍然无法得到确切的结果
我工作的时区是伦敦(GMT)。退房
创建一个秒数,该秒数表示
两个指定的部分日期时间。
这两个部分必须包含相同的字段,例如
指定两个LocalTime对象
参数:
start - the start partial date, must not be null
end - the end partial date, must not be null
返回:
the period in seconds
Joda是一个完美的库,但如果需要以毫秒为单位的两个日期之间的差值,则只需计算getTime()之间的差值。如果你得到了错误的结果,你会在时区上遇到一些问题。通常它是有效的 Init两个日期时间和使用期限:
DateTime dt1 = new DateTime(2013,9,11,9,58,56);
DateTime dt2 = new DateTime(2013,9,11,9,58,59);
Period p = new Period(dt1, dt2, PeriodType.millis());
要以毫秒为单位获取差异,请执行以下操作:
System.out.println(p.getValue(0));
JodaTime在内部使用机器时间。因此,要查找毫秒,可以使用一个常量来存储LocalDateTime,它引用1970年1月1日(因为) Unix时间或POSIX时间是用于描述时间点的系统, 定义为从午夜开始经过的秒数 1970年1月1日的协调世界时(UTC),不包括闰 秒。然后计算日期和时间之间的差异 我试着这样做
public static void main(String[] args) {
final LocalDateTime JAN_1_1970 = new LocalDateTime(1970, 1, 1, 0, 0);
DateTime local = new DateTime().withZone(DateTimeZone.forID("Europe/Amsterdam"));
DateTime utc = new DateTime(DateTimeZone.UTC);
System.out.println("Europe/Amsterdam milis :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.forID("Europe/Amsterdam")), local).getMillis());
System.out.println("UTC milis :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.UTC), utc).getMillis());
}
结果是,
Europe/Amsterdam milis :1429695646528
UTC milis :1429692046534
写一篇好评论
您的本地和utc代表相同的时间点(仅适用于
不同的时区)。因此,getMillis()(它给出
从对应于的“瞬间”起经过的“物理”时间间隔
unix历元)必须返回相同的值
如果你得到的是13个小时的差异,而不是一个小时的差异:你有没有检查过,当你进行计算时,不是上午12点对下午1点?我的第一个想法是这样的。另外,你应该知道伦敦的时区不是
GMT
,而是Europe/London
。这两个看起来很相似,直到你遇到一个边缘案例(比如夏令时),然后你会想为什么你所有的时间都缩短了一个小时。“乔达是一个完美的图书馆”。。。。查看newdatetime((Date)null)
的实现,然后告诉我:)这可能是最有效的方法+1为此,使用p.getMillis()
要比引用indexjoda time的Period类(从joda time 2.9.9开始)更好,它只支持毫秒字段中的int
值,因此当两个日期(以毫秒为单位)之间的差溢出整数存储时,这种方法会中断。若要看到它中断,请将dt1
更改为,dt1=新的日期时间(1970,1,1,0,0)代码>
Europe/Amsterdam milis :1429695646528
UTC milis :1429692046534