Java相同日期包含不同时间(毫秒)

Java相同日期包含不同时间(毫秒),java,Java,我有两个calendar对象,它们似乎包含相同的日期,但compareTo()方法返回的结果是-1,有人能解释这背后的原因吗 调试两个日历对象时,结果如下所示: 2014-06-01T00:00:00.000Z 对于两个日历对象,但compareTo()返回-1。即使两个日期的长时间(以毫秒为单位)也是不同的。好吧,看看日历代码(这是来自JDK 1.7.0-13): 显然,如果两个日历具有不同的毫秒,则根据第二种方法,它们是不同的 在任何情况下,示例中的毫不应同时表示2014-06-01T00:

我有两个calendar对象,它们似乎包含相同的日期,但compareTo()方法返回的结果是-1,有人能解释这背后的原因吗

调试两个日历对象时,结果如下所示:

2014-06-01T00:00:00.000Z


对于两个日历对象,但compareTo()返回-1。即使两个日期的长时间(以毫秒为单位)也是不同的。

好吧,看看
日历
代码(这是来自JDK 1.7.0-13):

显然,如果两个
日历
具有不同的
毫秒
,则根据第二种方法,它们是不同的

在任何情况下,示例中的毫不应同时表示
2014-06-01T00:00:00.000Z
,因此代码中存在另一个问题。试试这个:

Timestamp ts1 = new Timestamp( 1401561000000L );
Timestamp ts2 = new Timestamp( 1401595200000L );
System.err.println( ts1 );
System.err.println( ts2 );
产出:

2014-05-31 20:30:00.0
2014-06-01 06:00:00.0

干杯,

好吧,看看
日历
代码(来自JDK 1.7.0-13):

显然,如果两个
日历
具有不同的
毫秒
,则根据第二种方法,它们是不同的

在任何情况下,示例中的毫不应同时表示
2014-06-01T00:00:00.000Z
,因此代码中存在另一个问题。试试这个:

Timestamp ts1 = new Timestamp( 1401561000000L );
Timestamp ts2 = new Timestamp( 1401595200000L );
System.err.println( ts1 );
System.err.println( ts2 );
产出:

2014-05-31 20:30:00.0
2014-06-01 06:00:00.0

干杯,

好吧,看看
日历
代码(来自JDK 1.7.0-13):

显然,如果两个
日历
具有不同的
毫秒
,则根据第二种方法,它们是不同的

在任何情况下,示例中的毫不应同时表示
2014-06-01T00:00:00.000Z
,因此代码中存在另一个问题。试试这个:

Timestamp ts1 = new Timestamp( 1401561000000L );
Timestamp ts2 = new Timestamp( 1401595200000L );
System.err.println( ts1 );
System.err.println( ts2 );
产出:

2014-05-31 20:30:00.0
2014-06-01 06:00:00.0

干杯,

好吧,看看
日历
代码(来自JDK 1.7.0-13):

显然,如果两个
日历
具有不同的
毫秒
,则根据第二种方法,它们是不同的

在任何情况下,示例中的毫不应同时表示
2014-06-01T00:00:00.000Z
,因此代码中存在另一个问题。试试这个:

Timestamp ts1 = new Timestamp( 1401561000000L );
Timestamp ts2 = new Timestamp( 1401595200000L );
System.err.println( ts1 );
System.err.println( ts2 );
产出:

2014-05-31 20:30:00.0
2014-06-01 06:00:00.0

干杯,

毫秒数是Java中的“官方”时间。但是,由于各种原因,有些日期/时间相同的数字的毫秒数不同。那么正常的原因是时钟调整。有时你必须加上一两秒钟来解释地球轨道的不规则性。另一个主要来源是当区域第一次进入UTC时,一些时区移动了几个小时

这些东西还有一个共同的来源:DST。
当您使用夏时制时,这种情况每年会发生两次。一方面,有一些日期/时间不存在,因为它们被“跳过”,还有一些时间发生两次,因为时钟在午夜重置,所以晚上11点午夜在同一天发生两次。

毫秒数是Java中的“官方”时间。但是,由于各种原因,有些日期/时间相同的数字的毫秒数不同。那么正常的原因是时钟调整。有时你必须加上一两秒钟来解释地球轨道的不规则性。另一个主要来源是当区域第一次进入UTC时,一些时区移动了几个小时

这些东西还有一个共同的来源:DST。
当您使用夏时制时,这种情况每年会发生两次。一方面,有一些日期/时间不存在,因为它们被“跳过”,还有一些时间发生两次,因为时钟在午夜重置,所以晚上11点午夜在同一天发生两次。

毫秒数是Java中的“官方”时间。但是,由于各种原因,有些日期/时间相同的数字的毫秒数不同。那么正常的原因是时钟调整。有时你必须加上一两秒钟来解释地球轨道的不规则性。另一个主要来源是当区域第一次进入UTC时,一些时区移动了几个小时

这些东西还有一个共同的来源:DST。
当您使用夏时制时,这种情况每年会发生两次。一方面,有一些日期/时间不存在,因为它们被“跳过”,还有一些时间发生两次,因为时钟在午夜重置,所以晚上11点午夜在同一天发生两次。

毫秒数是Java中的“官方”时间。但是,由于各种原因,有些日期/时间相同的数字的毫秒数不同。那么正常的原因是时钟调整。有时你必须加上一两秒钟来解释地球轨道的不规则性。另一个主要来源是当区域第一次进入UTC时,一些时区移动了几个小时

这些东西还有一个共同的来源:DST。
当您使用夏时制时,这种情况每年会发生两次,一方面,有些日期/时间不存在,因为它们被“跳过”,另一些时间发生两次,因为时钟在午夜重置,因此,晚上11点午夜在同一天发生两次。

如果您只想比较分钟,而忽略毫秒或秒,请执行以下操作:

你需要使用

cal.set(Calendar.MILLISECOND, 0);
也可能

cal.set(Calendar.SECOND, 0);
如果你只需要几分钟来匹配


快速解释正在发生的事情:

各国:

比较时间值(与历元的毫秒偏移) 由两个日历对象表示

所以您承认“.两个日期的长时间(毫秒)是不同的…”

他说:

Calendar.setTime接受一个java.util.Date,它只是一个包装器 大约一个long,表示从1月1日午夜开始的毫秒数 1970年1月1日,UTC。它不是“格式为MM/dd/yyy”-这是一个字符串