gpt4 book ai didi

java.text.ParseException : Unparseable date when trying to convert "2013-07-01T04:37:14.771468Z" into Local time

转载 作者:行者123 更新时间:2023-12-01 07:09:10 26 4
gpt4 key购买 nike

我需要使用以下方法将我获得的 UTC 时间字符串转换为本地时间,

String dateCreate = "2013-07-01T04:37:14.771468Z"

DateFormat dfParse = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss'Z'");
dfParse.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));
java.util.Date dateTime;
dateTime = dfParse.parse(dateCreate);
String dteCreate = df.format(dateTime);

有人可以给我一个解决方案吗? :)

最佳答案

编辑:既然我已经检查过它很容易支持这一点,我强烈建议您使用 Joda Time 。它的 ISO-8601 解析器工作正常:

String dateCreate = "2013-07-01T04:37:14.771468Z";
DateTimeFormatter formatter = ISODateTimeFormat.dateTime();
DateTime parsed = formatter.parseDateTime(dateCreate);

默认情况下,将转换为系统默认时区,但您可以通过调用 DateTimeFormatter 来更改该行为。

Joda Time 也是一种比内置 API 干净得多的 API - 您会发现任何日期/时间代码都更容易编写和阅读。

<小时/>

查看您的输入数据和模式:

String dateCreate = "2013-07-01T04:37:14.771468Z";

DateFormat dfParse = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss'Z'");

他们根本不匹配。您需要类似的东西:

// Don't use this directly!
DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");
dfParse.setTimeZone(TimeZone.getTimeZone("UTC"));

或者:

// Don't use this directly!
DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSX");

后者将应对任何 ISO-8601 时区;前者仅限于 UTC。

不幸的是,上面的结果将得到错误的毫秒数,因为所有微秒都是毫秒。我不知道在 Java 中避免这种情况的方法...您可能需要先修剪字符串。例如:

// Remove the sub-millisecond part, assuming it's three digits:
int firstPartLength = "yyyy-MM-ddTHH:mm:ss.SSS".length();
String noMicros = dateCreate.substring(0, firstPartLength) +
dateCreate.substring(firstPartLength + 3);
// Now we've got text without micros, so create an appropriate pattern
DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date date = dfParse.parse(noMicros);

或者,如果您知道它总是以“Z”结尾:

int firstPartLength = "yyyy-MM-ddTHH:mm:ss.SSS".length();
String noMicros = dateCreate.substring(0, firstPartLength);
DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
dfParse.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = dfParse.parse(noMicros);

这很烦人,如果能够告诉 Java 将点后的任何数字视为“秒的一小部分”,那就太好了,但我不知道有什么方法可以做使用SimpleDateFormat。请注意,无论如何,您都无法仅使用 Date 来表示亚毫秒值。

关于java.text.ParseException : Unparseable date when trying to convert "2013-07-01T04:37:14.771468Z" into Local time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17440671/

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