嗨~当我试图获取两个日期之间的间隔时,我遇到了一个奇怪的问题。问题是,当日期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 .
仅供引用,根据this page,中国在1986年至1991年间实行夏令时。他们不再观察它了。
关于java - 为什么日期 1986/05/04 从 1 :00 but not 0:00 in java ( strange behaviours of calendar with the time zone - Shanghai )? 开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20755695/