【问题标题】:Convert timestamp UTC to PST in Java在Java中将时间戳UTC转换为PST
【发布时间】:2021-05-28 13:29:24
【问题描述】:

我们有一个要求,日期时间数据以 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;
  }

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

【问题讨论】:

    标签: java spring spring-boot spring-mvc


    【解决方案1】:

    首先将UTC添加到时间戳,
    然后转换

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

    申请toLocalDateTime() 以获取没有区域信息的日期时间。


    注意:格式化程序用于将对象(~二进制)转换为字符串,反之亦然,即format()(类似toString())用于创建代表该对象的Stringparse() 是相反的,尝试从给定的String 创建一个对象。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 嗯...删除了格式化程序并使用了您的代码。但是时间转换没有发生。转换后还会以 UTC 格式返回日期。
      猜你喜欢
      • 2016-01-13
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2015-11-25
      • 1970-01-01
      • 2021-09-05
      • 2011-02-06
      相关资源
      最近更新 更多