当前位置: 首页 > 知识库问答 >
问题:

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

乜钱明
2023-03-14

我有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);
Date after it is formatted:Thu Mar 31 01:00:00 BST 2011

如果我用不同的日期一遍又一遍地运行相同的结果,我会得到不同的输出

  • 20120331>>英国夏令时>>格式化后的日期:SAT 3月31日01:00:00英国夏令时2012
  • 20121231>>GMT>>格式化后的日期:Mon Dec 31 00:00:00 GMT 2012
  • 20130328>>GMT>>格式化后的日期:Thu 3月28日00:00:00 GMT 2013
  • 20130331>>GMT>>格式化后的日期:Sun 3月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>>英国夏令时>>格式化后的日期:星期二Apr 02 01:00:00英国夏令时2013
  • 20130501>>英国夏令时>>格式化后的日期:WD 5月01:00:00英国夏令时2013

似乎有一个范围,在2012年到2013年,所有计算到格林尼治时间。我不知道为什么会这样。

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();
}
    null

共有1个答案

狄冠宇
2023-03-14

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

在夏天,伦敦处于英国夏令时(BST)时区。冬天,它在格林尼治时间的时区。时区改变的日期每年都不一样。

 类似资料:
  • 位于新加坡(时区-“亚洲/新加坡”)的我的系统从印度尼西亚(时区-“亚洲/新加坡”)的外部系统接收字符串datetime(yyyy-MM-dd HH:MM:ss)。 如何在java 1.7中将收到的String日期时间转换为UTC? 这是我的代码:

  • 我正在与它的时区约会,我想把它转换成另一个时区,例如。我的日期是“3/15/2013 3:01:53 PM”,它位于时区“GMT-06:00”。我想在'GMT-05:00'时区转换这个。我有很多搜索,我不知道实际约会是如何运作。如何将时区应用到日期。我尝试过SimpleDateFormat、Calender和Offset。 它返回输出。我猜应该是,因为时间在'GMT-06:00'时区,所以应该是H

  • 问题内容: 我的时区有日期,我想将其转换为另一个时区,例如我的日期为“ 2013年3月15日下午3:01:53 PM”,位于时区“ GMT-06:00”。我想在“ GMT-05:00”时区进行转换。我的搜索量很多,对日期的实际工作方式感到困惑。如何将时区应用于日期。我尝试使用SimpleDateFormat,日历和偏移量。 它返回输出 。我想应该是 ,因为时间是在’GMT-06:00’时区,所以在

  • 我有一些日期格式的字符串,例如 我使用SimpleDateForate并尝试将String类型转换为Date类型。它将String类型转换为Date类型,但是Java无法识别时区“MYT”,而是将其设置为计算机的默认时区,即“CST”。我需要在Date对象中记录时区。我该怎么做?

  • 问题内容: 我有一个相当简单的分页查询,用于从表中获取行 该参数决定结果应按哪一列排序。 和都是日期时间字段。但是是varchar字段。 对于两个datetime字段,查询运行都很好,但是当出现以下错误时: “从字符串转换日期和/或时间时转换失败。” 我遇到的问题是我没有尝试转换任何东西吗? 问题答案: 您需要将您的语句划分为多个语句: 这是因为单个语句要求所有分支都具有兼容的数据类型。由于一个字

  • 问题内容: 我在mysql中使用NOW()获取当前日期和时间。我想将日期值转换为varchar并将其与另一个字符串连接。我该怎么做? 问题答案: 使用DATE_FORMAT()