【问题标题】:How do i convert "2019-07-14T18:30:00.000Z" to "2021-09-26 04:30:00 PM" using DateTimeFormatter or any other library in Java [duplicate]如何使用 DateTimeFormatter 或 Java 中的任何其他库将“2019-07-14T18:30:00.000Z”转换为“2021-09-26 04:30:00 PM”[重复]
【发布时间】:2020-01-26 16:25:26
【问题描述】:

我不确定这是否已经得到解答,但是谁能告诉我如何将“2019-07-14T18:30:00.000Z”转换为“2019-07-14 04:30:00” PM" 使用 DateTimeFormatter 或 Java 中的任何其他库?基本上输出的日期时间应该有 AM/PM 格式的时间。

【问题讨论】:

  • 这两个日期之间的依赖关系是什么?
  • 抱歉有错别字。我想使用 DateTimeFormatter 或 Java 中的任何其他库将“2019-07-14T18:30:00.000Z”转换为“2019-07-14 04:30:00 PM”。输出日期时间应具有 AM/PM 格式的时间
  • 你有什么依据有天、月和时差@KirtiJha
  • 您可以确定它已经被询问和回答,或者至少您可以从现有答案中找到您自己的答案。是的,你是对的,DateTimeFormatter 是你想要使用的类之一。
  • @OleV.V.看起来现在是 GMT-02:00,不是吗? Seems to work.

标签: java datetime-format java-time


【解决方案1】:

通过使用ZonedDateTime,您可以解析输入的UTC格式字符串,然后使用LocalDateTimeDateTimeFormatter来格式化输出字符串。但我不确定您在输入和输出字符串中有天、月和时差的依据是什么

String date = "2019-07-14T18:30:00.000Z";

ZonedDateTime dateTime = ZonedDateTime.parse(date);

String res = dateTime.withZoneSameInstant(ZoneId.of("//desired zone id")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a"));

【讨论】:

  • 模式符号“H”代表一天中的小时。你需要“h”代替。另一个错误是缺少对时区的处理。仅将 UTC-Time 转换为“LocalDateTime”并不是 OP 想要的。
  • 对不起,我错过了,但我更新了答案。关于时区 OP 从未提到他需要在不同时区输出,甚至我在我的回答中也引用了 @MenoHochschild
  • OP 已宣布他希望将“2019-07-14T18:30:00.000Z”转换为“2019-07-14 04:30:00 PM”。因此很明显,他不想要 UTC 时间(在给定示例中相差两个小时)。
  • 那是GMT-20.00 你能告诉我是哪个时区吗? @MenoHochschild
  • 好的,由于您的更正,我现在删除了我的反对票。
【解决方案2】:

试试这个

String date = "2019-07-14T18:30:00.000Z";
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
Date parsedDate = inputFormat.parse(date);
String formattedDate = outputFormat.format(parsedDate);
System.out.println(formattedDate);

【讨论】:

  • 您忽略了Z 指定特定时区的事实。解析前需要调用inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
  • 不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。问题中甚至提到了这一点,并且该问题被标记为 java.time。您提出了更糟糕的建议,因此有误入歧途的风险。
猜你喜欢
  • 2021-11-25
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多