在 Java 中将时间戳 UTC 转换为 PST

时间:2021-02-26 06:40:44

标签: java spring spring-boot spring-mvc

我们有一个要求,其中日期时间数据以 UTC 格式存储在 DB 中。但 UI 要求是以 PST 格式显示。

因此我们需要在 Java Spring 中构建 API 数据的同时操作数据。

来自 DB 的数据采用以下格式:"2020-11-16T11:13:46" [This is UTC]

我尝试了以下解决方案,但出现错误。

  private LocalDateTime convertUtcToPst(LocalDateTime timeStamp) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss" );
    LocalDateTime ldt = LocalDateTime.parse(timeStamp, formatter);
    ZoneId zoneId = ZoneId.of("America/Los_Angeles" );
    ZonedDateTime zdt = ldt.atZone(zoneId );

    return zdt;
  }

enter image description here

有人可以帮我解决这个问题吗? 如果你查看 return 语句,它也显示了一个错误。

2 个答案:

答案 0 :(得分:2)

首先在时间戳中添加UTC,
然后转换

ZonedDateTime zoned = timestamp.atZone(ZoneId.of("UTC"));
ZonedDateTime converted = zoned.withZoneSameInstant(
                            ZoneId.of("America/Los_Angeles"));

应用 toLocalDateTime() 获取没有区域信息的日期时间。


注意:formaters 用于将对象(~二进制)转换为字符串,反之亦然,即 format()(类似 toString())用于创建一个 String 表示那个物体; parse() 则相反,尝试从给定的 String 创建一个对象。

答案 1 :(得分:1)

你为什么使用格式化程序?您已经有一个 LocalDateTime

 private LocalDateTime convertUtcToPst(LocalDateTime timeStamp) {
    ZoneId zoneId = ZoneId.of("America/Los_Angeles" );
    ZonedDateTime zdt = timeStamp.atZone(zoneId );

    return zdt;
  }