嗨〜当我试图获得两个日期之间的间隔时,我遇到了一个奇怪的问题。问题是当日期 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]
答案 0 :(得分:7)
这是正常的,1986年5月4日中国没有0点。在中国这个日期(1986/05/04)有一个白天节省时间的变化。关于this confirms it的快速谷歌。
仅仅是为了获取信息,根据this page,中国观察到1986年至1991年间的夏令时节省时间。他们不再观察它了。