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

DateFormat格式方法不将解析的日期显示到特定时区

路昆杰
2023-03-14

所以我必须将它重新格式化回UTC。现在当我试图通过相同的格式化方法将这个解析的日期显示到UTC时区时,它仍然显示在本地时区中。下面是我的代码,将解析的日期格式化为UTC-

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.setTime(alreadyParsedDateTime); // 
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime()));       

我的示例日期字符串是“2015-12-23T15:00:00-0800”
分析后--alreadyParsedDateTime.ToString()::Thu Dec 24 04:30:00 IST 2015
分析后--System.Out.Println(新的SimpleDateFormat(“YYYY-MM-DD'T'HH:MM:SS”).Format(alreadyParsedDateTime))::2015-12-24T04:30:00

在上面提到的将解析的日期重新格式化为UTC之后--system.out.println(新的SimpleDateFormat(“yyyy-mm-dd't'hh:mm:ss”).format(cal.getTime()))::2015-12-24T04:30:00

预计日期格式为:2015-12-23T23:00:00

我不知道为什么format方法不能以预期的方式工作,或者有什么技巧可以做到这一点。好心的帮助..

共有1个答案

年烈
2023-03-14

这里有两个不同的主题;分析和格式化。

simpledateformat.parse()将尝试从提供的日期字符串分析时区。如果正在解析的日期字符串不包括显式时区,则将使用SimpleDateFormat对象上的“默认”时区。可以使用setTimeZone()方法设置默认时区。请参阅simpledateformat.parse()dateformat.settimezone()的API文档以获得参考。

下面是一个示例,它展示了使用settimezone()设置的时区对解析的影响:

    String dateString = "2015.12.10 13:58:18";

    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
    sdf1.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date date1 = sdf1.parse(dateString);

    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
    sdf2.setTimeZone(TimeZone.getTimeZone("EST"));
    Date date2 = sdf2.parse(dateString);

    // Shows that the parsing honours time zone -- will print:
    // Thu Dec 10 14:58:18 CET 2015 (original date was parsed as GMT)
    // Thu Dec 10 19:58:18 CET 2015 (original date was parsed as EST)
    System.out.println(date1);
    System.out.println(date2);
    Calendar cal = Calendar.getInstance();
    cal.setTime(alreadyParsedDateTime);
    SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    sdf3.setTimeZone(TimeZone.getTimeZone("UTC"));

    // Prints: 2015-12-23T23:00:00 for your example date string
    System.out.println(sdf3.format(cal.getTime()));
 类似资料:
  • 在使用date格式自动设置为IE后,我试图解析某个包含日期条目为纪元数值的json文档。我需要不同的格式(也需要一毫秒) 所以问题是,如何解析IE。转换为带有Bson文档的某种自定义格式字符串。解析方法? 编辑:只是一个更新:问题在document.parse方法中,因为我不知道如何在解析json文档时使用tell.parse函数来使用自定义的日期格式。我总是得到某种默认的日期格式。如何发送给.p

  • IllegalArgumentException:无法将给定对象格式化为日期 这里会出什么问题?

  • 问题内容: 我正在使用Moment.js解析和格式化Web应用程序中的日期。作为JSON对象的一部分,我的后端服务器以UTC纪元(Unix偏移)为单位发送日期(以毫秒为单位)。 在特定时区中 解析日期很容易-只需在解析前将RFC 822时区标识符附加到字符串的末尾即可: 但是,如何格式化 特定时区中 的日期? 无论浏览器的当前时间如何,我都希望获得一致的结果,但是我不想以UTC显示日期。 问题答案

  • 日期显示方式 设定画面上[年月日]的排列顺序。

  • 本文向大家介绍浅析GridView中显示时间日期格式的问题,包括了浅析GridView中显示时间日期格式的问题的使用技巧和注意事项,需要的朋友参考一下 以下都是GridView基本常用的日期,时间格式 形式 语法 结果 注释 数字 {0:N2} 12.36   数字 {0:N0} 13   货币 {0:c2} $12.36   货币 {0:c4} $12.3656   货币 "¥{0:N2}" ¥

  • 问题内容: 我必须在Java中使用自定义日期格式。尽管Java不提供对微秒的支持,但它包含微秒。因此,我用零填充了时间模式,在格式化时它可以很好地工作,但是我无法使用该模式解析日期字符串。 有没有简单的解决方法,还是我必须自己处理微秒(使用String函数)? java.text.ParseException:无法解析的日期:“ 2010-01-25-12.40.35.769000” 问题答案: