嗨〜我尝试获取两个日期之间的间隔时遇到了一个奇怪的问题。问题是,当日期1986/05/04在我的计算中使用的两个日期之内时,结果小于我想要的结果。这是因为1986/05/04从1:00开始但不是0:00,这是测试代码:

public static void main( String[] args )
{
    Calendar bc = new GregorianCalendar( 1986, 4, 4, 0, 0, 0 );
    Calendar ec = new GregorianCalendar( 1986, 4, 5, 0, 0, 0 );
    System.out.println( "bch: " + bc.get( Calendar.HOUR_OF_DAY ) + " bcm: " + bc.get( Calendar.MINUTE )
            + " bcs: " + bc.get( Calendar.SECOND ) + " bcms: " + bc.get( Calendar.MILLISECOND ) );
    System.out.println( "ech: " + ec.get( Calendar.HOUR_OF_DAY ) + " ecm: " + ec.get( Calendar.MINUTE )
            + " ecs: " + ec.get( Calendar.SECOND ) + " ecms: " + ec.get( Calendar.MILLISECOND ) );
    System.out.println( "Interval: " + ((ec.getTimeInMillis() - bc.getTimeInMillis())) );
}


输出为:

bch: 1 bcm: 0 bcs: 0 bcms: 0
ech: 0 ecm: 0 ecs: 0 ecms: 0
Interval: 82800000


我想要86400000。您可以看到,尽管我将1986/05/04的小时设置为0,但仍然没有用。我真的无法理解结果,并想知道格里高利日历中是否有一些我不知道的特殊规则,或者仅仅是格里高利日历的错误。如果您能帮助我,我将不胜感激。

环境:

JRE 1.6
ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]

最佳答案

1986年5月4日在中国没有0:00是正常的。此日期(1986/05/04)在中国有夏令时更改。关于this confirms it的快速Google。

仅出于参考目的,根据this page,中国观察到了1986年至1991年之间的夏时制。他们不再观察它。

09-05 10:36