我的格式为年月日,我试图解析为使用作为为什么从String转换日期时Java时区不同?
public static DateFormat getDateFormat() {
SimpleDateFormat result = new SimpleDateFormat("yyyyMMdd");
result.setLenient(false);
return result;
}
获得的日期格式我设置的默认时区时,在程序运行的
public static void doTheDateZoneInit() {
TimeZone tzone = TimeZone.getTimeZone("Europe/London");
TimeZone.setDefault(tzone);
}
当日期日期字符串我格式化日期并输出它,而不在打印字符串中指定时区
Date myDate= getDateFormat().parse("20110331");
System.out.println("Date after it is formatted:" + myDate);
输出在BST时区
Date after it is formatted:Thu Mar 31 01:00:00 BST 2011
如果我有不同的日期运行相同的一遍又一遍,我得到不同的输出
- 20120331 >> BST >>日期被格式化后:星期六3月31日1点00分〇〇秒BST 2012
- 20121231 >> GMT >>日期被格式化后:周一12月31日00:00:00 GMT 2012
- 20130328 >> GMT >>日期被格式化后:周四3月28日00:00:00 GMT 2013
- 20130331 >> GMT >>格式化后的日期:Sun M ar 31 00:00:00 GMT 2013
- 20140331 >> BST >>格式化后的日期:星期一3月31日01:00:00 BST 2014
- 20130401 >> BST >>格式化后的日期:星期一Apr 01 01:00:00 BST 2013
- 20130402 >> BST >>格式化后的日期:Tue Apr 02 01:00:00 BST 2013
- 20130501 >> BST >>格式化后的日期:Wed May 01 01:00:00 BST 2013
似乎有一个范围从2012年到2013年,所有计算到格林威治标准时间。我不知道为什么会发生这种情况。
问题是,我在这些日期中添加了结束时间...... 我使用从String转换的日期调用以下方法,并将23:59:59:999添加到它以便获取指定日期的最新时间。
public static Date addAlmostOneDay(Date startDate) {
Calendar cal = new GregorianCalendar();
cal.setTime(startDate);
cal.add(Calendar.HOUR, 23);
cal.add(Calendar.MINUTE, 59);
cal.add(Calendar.SECOND, 59);
cal.add(Calendar.MILLISECOND, 999);
return cal.getTime();
}
但在其转换为GMT如果我要添加23时59分59秒......这不是设置的日期原始日期的结束,而是采用BST之间的时间差异列表的情况下和GMT考虑
- 太阳03月31日00:00:00 GMT 2013成为周一4月1日零点59分59秒BST 2013(次日+ 1小时) 而
- 周一4月1日01:00: 00 BST 2013变成Mon Apr 01 23:59:59 BST 2013(今天结束是我想要的)
有人可以请说明为什么这似乎是hapening。相同的代码是用不同的YYYMMDD格式输入运行的?
我不明白。您将默认时区设置为BST,然后打印日期,并且在BST时区输出日期会感到惊讶吗?这不是预期的吗?或者我错过了什么?你可以发布SSCCE,告诉我们你期望它做什么以及它做什么? – 2013-03-17 10:26:47