使用Java日历时忽略DST

Ed *_*ing 3 java calendar dst

我有一个可以绘制时序图的GUI。用户通过在文本框中输入值来输入要绘制的日期。例如,如果他们输入25/07/13 22:0026/07/13 00:00,则该图应标绘从25号的22:00:00到第二天的00:00:59的数据。用户输入的时间被解析为一个Calendar对象。

我的问题来自DST。

用户并不关心DST,因此他们只希望看到这两次之间的图表。但是,Calendar对象确实关心DST,因此我的“截止”日期当前不是00:00,而是01:00。(我在伦敦,目前是格林尼治标准时间+ DST 1小时)。

我想有效地忽略DST,并且在绘制图形时就好像一切都是GMT + 0。

我怎样才能做到这一点?

Ed *_*ing 6

谢谢你们的回答,他们帮助我解决了这个问题。归结为这样一个事实,即我既使用Calendar对象来表示和存储数据,又使用epoch临时计算。

事实证明,这些Calendar set()方法当然会考虑DST。因此,当我在用户输入的文本框中解析时间值并将其set()用于每个单独的Calendar字段时,该Calendar对象将基于历史数据知道您刚刚设置的日期是否将应用DST。因此,即使您没有意识到它,您也可以理解为您的意思是GMT + 1(坦率地说,是谁做的!!)。

但是,当您这样做时getTimeInMillis()epoch返回的对象没有时区或DST的概念,因此要与当前时区匹配,必须将DST手动应用于返回的时区epoch(如果适用)。相反,当您setTimeInMillis()在某个Calendar对象上使用时,假定您输入的时间为GMT + 0,但是如果epochd是当前已应用DST的日期,则该Calendar对象将为您添加该时间,这意味着您需要+1小时从你以为的地方。若要解决此问题,需要epoch在日历中设置DST之前,再次从DST中减去DST 。

所有这些混淆在日间边界上尤其重要,尤其是如果您将日分辨率用于任何事物,例如我。