尝试从2023-01-11 18:27:59UTC-06:00转换为2023-01-12T00:27:59.000Z——



我有像下面这样的字符串日期格式

2023-01-11 18:27:59UTC-06:00

需要转换为像2023-01-12T00:27:59.000Z(在UTC区域)

我试了下面的方法。我得到异常Exception in thread "main" java.time.format.DateTimeParseException: Text '2023-01-09 23:56:59UTC-05:30' could not be parsed at index 10。异常来自这一行:

LocalDateTime labelTime = LocalDateTime.parse(dateUTC, DateTimeFormatter.ofPattern(INPUT_FORMAT));

我的短代码示例:

String dateUTC="2023-01-09 23:56:59UTC-05:30";
final String INPUT_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
final String OUTPUT_FORMAT = "yyyy-MM-dd'T'HH:mm:ssXXX";
final DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern(OUTPUT_FORMAT);
LocalDateTime labelTime = LocalDateTime.parse(dateUTC, DateTimeFormatter.ofPattern(INPUT_FORMAT));
ZoneId utcZoneId = ZoneId.of("UTC");
ZonedDateTime zdt = labelTime.atZone(utcZoneId);
System.out.println("OUT PUT Format"+dtf2.format(zdt));

使用模式uuuu-MM-dd HH:mm:ss'UTC'XXX将给定的日期-时间字符串解析为OffsetDateTime,并使用OffsetDateTime#withOffsetSameInstant将结果转换为另一个OffsetDateTimeZoneOffset.UTC

:

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
class Main {
public static void main(String[] args) {
DateTimeFormatter parser = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss'UTC'XXX", Locale.ENGLISH);
OffsetDateTime odt = OffsetDateTime.parse("2023-01-11 18:27:59UTC-06:00", parser)
.withOffsetSameInstant(ZoneOffset.UTC);
System.out.println(odt);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);
String formatted = odt.format(formatter);
System.out.println(formatted);
}
}

:

2023-01-12T00:27:59Z
2023-01-12T00:27:59.000Z
<<p>

在线演示/kbd>注意:在这里,你可以使用y而不是u,但我更喜欢u而不是y

Trail: Date Time了解更多关于现代Date-Time API的信息.

相关内容

最新更新