gpt4 book ai didi

java - 为什么从字符串转换日期时Java时区不同?

转载 作者:行者123 更新时间:2023-12-01 07:33:19 24 4
gpt4 key购买 nike

我有格式为 YYYYMMDD 的日期字符串,我正在尝试使用获得的日期格式化程序将其解析为日期

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 >> 格式化后的日期:Sat Mar 31 01:00:00 BST 2012
  • 20121231 >> GMT >> 格式化后的日期:Mon Dec 31 00:00:00 GMT 2012
  • 20130328 >> GMT >> 格式化后的日期:Thu Mar 28 00:00:00 GMT 2013
  • 20130331 >> GMT >> 格式化后的日期:Sun Mar 31 00:00:00 GMT 2013
  • 20140331 >> BST >> 格式化后的日期:Mon Mar 31 01:00:00 BST 2014
  • 20130401 >> BST >> 格式化后的日期:Mon 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 年之间有一个范围,其中所有内容均以 GMT 计算。我不知道为什么会发生这种情况。

问题是我在这些日期中添加了一天结束的时间......例如我使用从字符串转换的日期调用以下方法,并向其中添加 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 之间的时间差异

  • 2013 年 3 月 31 日星期日 00:00:00 GMT 变为 2013 年 BST 2013 年 4 月 1 日星期一 00:59:59(第二天 + 1 小时)同时
  • Mon Apr 01 01:00:00 BST 2013 变为 Mon Apr 01 23:59:59 BST 2013(今天结束是我想要的)

有人可以解释一下为什么会发生这种情况吗?相同的代码使用 YYYMMDD 格式的不同输入运行?

最佳答案

好吧,我想我明白你的意思了。您将默认时区设置为伦敦之一。

夏季,伦敦采用英国夏令时间 (BST) 时区。在冬季,时间为 GMT 时区。而且时区更改完成的日期每年都会有所不同。

关于java - 为什么从字符串转换日期时Java时区不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15459667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com