gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:08:22 26 4
gpt4 key购买 nike

我通过 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(DateinString) 将日期字符串转换为 Date。
这里不是转换为 UTC,而是转换为我的本地时区。我通过 DateFormat 的 format 方法显示这个解析的日期来检查它。

所以我必须将其重新格式化回 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(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(alreadyParsedDateTime))::2015-12-24T04:30:00

在上述将解析日期重新格式化为 UTC 之后 --System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(cal.getTime()))::2015-12-24T04:30:00

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

我不知道为什么格式方法不能按预期方式工作,或者有什么技巧可以做到这一点。请帮忙..

最佳答案

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

1。解析

SimpleDateFormat.parse() 将尝试从提供的日期字符串中解析时区。如果您正在解析的日期字符串不包含显式时区,则将使用 SimpleDateFormat 对象上的“默认”时区。您可以使用 setTimeZone() 方法设置默认时区。请参阅 SimpleDateFormat.parse() 的 API 文档和 DateFormat.setTimeZone()供引用。

下面的示例显示了使用 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);

2。格式设置

假设日期已被正确解析,那么您的问题在于格式。您需要为用于格式化的实际 SimpleDateFormat 对象设置时区。我修改了您的代码来执行此操作,它现在将打印您所期望的内容:

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

关于java - DateFormat 格式方法不显示特定时区的解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34200372/

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