从GregorianCalendar减去一天后,小时损坏 [英] Hours corrupted when subtract one day from GregorianCalendar

查看:650
本文介绍了从GregorianCalendar减去一天后,小时损坏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码:

Calendar calendar = new GregorianCalendar(0,0,0);
calendar.set(Calendar.YEAR, 1942);
calendar.set(Calendar.MONTH, 3);
calendar.set(Calendar.DAY_OF_MONTH, 4);

Date date1 = calendar.getTime();

calendar.add(Calendar.DAY_OF_MONTH, -1);

Date date2 = calendar.getTime();

System.out.println(date1 + "\n" + date2);

此代码输出如下:

Sat Apr 04 00:00:00 EEST 1942
Fri Apr 03 01:00:00 EEST 1942

其实我减去1天,应该保留时间。
但是为什么第二行输出在时间为1小时的时候应该是0?

Actually I subtract 1 day and time should be preserved. But why second line of output contains 1 hour in the time while it should be 0?

编辑:

目前我正在欧洲/赫尔辛基时区测试我的代码。

Currently I am testing my code in Europe/Helsinki timezone.

推荐答案

你正在使用芬兰时区。在芬兰,夏季夏令时间是在1942年4月2日23:59:59至4月3日凌晨1:00之间调整的。 4月3日,0:00:00至0:59:59的时间不存在,所以Java日历尽了最大努力。

I suppose you are using a Finnish timezone. In Finland, daylight saving time was introduced in 1942 by adjusting the clock from April 2nd, 23:59:59 to April 3rd, 1:00:00. The time span April 3rd, 0:00:00 to 0:59:59 did not exist, so the Java Calendar makes a best effort result.

这篇关于从GregorianCalendar减去一天后,小时损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆