【问题标题】:How to format date to a format with abbreviated timezone in Java?如何在Java中将日期格式化为带有缩写时区的格式?
【发布时间】:2018-06-09 03:16:00
【问题描述】:

我有一个格式为 2019-01-01T18:46:19 的日期字符串,我想将其转换为这种格式 06:46 pm AEST 01/01/19 例如带有缩写的澳大利亚时区。我如何在 Java 中做到这一点?

【问题讨论】:

  • 提问前你搜索了吗?这可能不是现有问题的非常精确的重复。不过我认为你可以从以前的问题和答案中得到很多帮助,比如this answer 的后半部分。我反对没有在搜索、研究和尝试一些代码方面付出任何努力。
  • 是的,我已经搜索过,但没有找到明显的解决方案。至少我的问题会在未来帮助任何人并节省他一些时间

标签: java android date datetime time


【解决方案1】:

您可以为此任务使用更新的java.time API:

import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.ZOneId;
import java.time.format.DateTimeFormatter;

ZoneId zone = ZoneId.of("Australia/Sydney");
LocalDateTime ldt = LocalDateTime.parse("2019-01-01T18:46:19") ;
ZonedDateTime zdt = ZonedDateTime.of(ldt, zone);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm a z dd/MM/yy");
System.out.println(dtf.format(zdt));

输出:

06:46 PM AEDT 01/01/19

注意:您在问题中的格式对于您想要日/月/年还是美国月/日/年是模棱两可的,但我会假设澳大利亚在更喜欢日/月/年方面跟随英国。

【讨论】:

  • 仅供参考,大部分 java.time 功能在ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…
  • 我建议让java.time automatically localize 而不是硬编码特定格式。 DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ).withLocale( new Locale( "en" , "AU" ) )
  • @BasilBourque 不幸的是,FormatStyle.MEDIUM 没有提供 OP 想要的相同格式。我同意通常硬编码特定格式可能不是最佳的,但在这种情况下,OP 在问题中有特定的输出格式。此外,OP 没有说明需要代码在过时版本的 JVM 下运行,但值得注意的是 API 已被向后移植。
  • @y.allam 听起来您使用 GMT+11:00 作为“时区”而不是澳大利亚/悉尼?请以 region/city 格式指定时区,我相信一切都会好起来的。如果您使用的是设备时区设置,请确保将其设置为实时时区,而不是与 GMT 的偏移量,
  • @y.allam 您使用的是什么 JDK?我使用 Oracle Hotspot JDK 版本 1.8.0_172、10.0.1 和 11-ea+17 获得 06:46 PM AEST 01/01/19
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多