gpt4 book ai didi

java - 带时区的 DateTime 到另一种格式

转载 作者:行者123 更新时间:2023-11-29 22:56:20 25 4
gpt4 key购买 nike

我在 yyyy-mm-ddThh:mm:ss.nnnnnn+|-hh:mm 中有一个日期时间,我想将其转换为这种格式 MMMM-yyyy我已使用 java.time API 成功完成此操作,但无法使用 SimpleDateTimeFormatter 执行此操作。因为 java.time 仅支持 android O 起,我仍然需要支持旧设备。我当前失败并给出异常的代码是

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
ZonedDateTime datetime = ZonedDateTime.parse(argDate);
DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("MMMM-yyyy");
String formatDateTime = datetime.format(targetFormatter);
return formatDateTime;
} else{
try {
DateFormat originalFormat = new SimpleDateFormat("yyyy-mm-ddThh:mm:ss.nnnnnn+|-hh:mm", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("MMMM-yyyy");
Date date = originalFormat.parse(argDate);
String formattedDate = targetFormat.format(date); // 20120821
return formattedDate;
}catch(Exception ex){
ex.printStackTrace();
}
}

异常(exception)是

W/System.err: java.lang.IllegalArgumentException: Illegal pattern character 'T' 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err: at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:873) 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err:
at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:687) 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err:
at java.text.SimpleDateFormat.(SimpleDateFormat.java:658) 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err:
at .ui.ContactDetailsActivity.formatDate(ContactDetailsActivity.java:652) 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err:
at .ui.ContactDetailsActivity.fillUserCompanyDetails(ContactDetailsActivity.java:620) 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err:
at .ui.ContactDetailsActivity.showUIFromData(ContactDetailsActivity.java:562) 2019-08-07 21:53:24.445 14123-14123/com..chat W/System.err:
at .ui.ContactDetailsActivity.access$300(ContactDetailsActivity.java:77) 2019-08-07 21:53:24.445 14123-14123/com.chat W/System.err:
at .ui.ContactDetailsActivity$6.onResponse(ContactDetailsActivity.java:544) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err:
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err:
at android.os.Handler.handleCallback(Handler.java:873) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err: at android.os.Looper.loop(Looper.java:193) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6718) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err: at java.lang.reflect.Method.invoke(Native Method) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 2019-08-07 21:53:24.446 14123-14123/com.chat W/System.err:
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

谁能帮我解决这个问题。我想我当时的格式不正确 2019-08-06T11:52:49:416472+5:30 我采用了 E8601DZw.d 格式,描述为 yyyy-mm -ddThh:mm:ss.nnnnnn+|-hh:mm here

最佳答案

三十ABP

既然你已经有了一个使用 java.time 的工作解决方案,并且因为 SimpleDateFormat 造成了麻烦(不仅对你:它臭名昭著麻烦),我建议你使用 java.time 的反向移植。 ThreeTenABP项目中已经适配Android。请参阅底部的链接。

严格来说,只有 java.time 的核心部分和最常用的部分被反向移植了。但是,这涵盖了至少 99% 使用 java.time 的程序中使用的所有内容,而且我相信您拥有的解决方案也将在 backport 上保持不变。当我说未更改时,一个更改是必要的:您必须使用子包从 org.threeten.bp 导入日期和时间类。

如果您坚持不使用反向移植,我还提供了有关解析 ISO 8601 格式的问题的链接。 ISO 8601 是国际标准,这就是您所拥有的格式。但是请注意:SimpleDateFormat 无法正确解析秒的 6 位小数。它只支持毫秒,正好是三位小数(不是 2,不是 4,不是 6)。

链接

关于java - 带时区的 DateTime 到另一种格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57398779/

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