【问题标题】:Timestamp behaving differently in local and deployable environment时间戳在本地和可部署环境中的行为不同
【发布时间】:2021-08-11 13:10:18
【问题描述】:

我有一个 spring boot 应用程序,它使用以下方法将时间戳解析为我需要的格式

public static String getDate(String input) {
    DateTimeFormatter parsePattern = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSXXXX");
    LocalDateTime ldt = LocalDateTime.parse(input, parsePattern);
    Date o = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
    SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    return sdf.format(o);
}

现在当这段代码在本地机器上执行时,上面的方法返回:

2021-08-11T09:00:02.237+05:30

但是当我将它部署到运行 nginx 服务器的环境时,上述方法返回:

2021-08-11T09:00:02.237Z

现在我的理解是它正在转换为 UTC 格式(+0000/Z)。如果我错了,请纠正我。但预期的格式是 2021-08-11T09:00:02.237+05:30(忽略 +05:30。只希望时区采用这种格式而不是 Z)。我怎样才能在环境中实现这一点?

【问题讨论】:

  • 当你想要一个特定的时区时,不要依赖ZoneId.systemDefault()
  • @Tom 感谢您的意见。但是我需要格式可以让我们说 UTC 它将是 +00:00 或 +0000。我不想要 Z
  • 您可以使用ZoneId.of("Asia/Kolkata") 代替默认值。
  • @aksappy 我不想要那个时区。我不希望我的格式化字符串中包含 Z
  • this 是否回答您的问题

标签: java spring-boot nginx google-cloud-platform timestamp-with-timezone


【解决方案1】:
ZonedDateTime nowHere = ZonedDateTime.of(ldt, ZoneId.systemDefault());
String timestamp = parsePattern.format(nowHere.withZoneSameInstant(ZoneId.of("UTC")));

这对你有用吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多