Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JodaTime以毫秒为单位获取两个日期之间的时差_Java_Jodatime - Fatal编程技术网

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