首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将毫秒转换为带偏移小时数的java日期(Z05:00)

将毫秒转换为带偏移小时数的java日期(Z05:00)
EN

Stack Overflow用户
提问于 2018-09-19 05:25:53
回答 1查看 803关注 0票数 -3

如何将毫秒为单位的字符串值转换为"2006-01-02T15:04:05Z07:00"格式的日期字符串?(用Z表示偏移量)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 11:12:25

我相信"2006-01-02T15:04:05Z07:00"是Golang指定日期-时间格式的方式。更准确地说,是ISO 8601格式。例如,实际的格式化字符串应该类似于2018-09-19T00:26:42-05:00。因此,请使用DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX")或仅使用DatetimeFormatter.ISO_OFFSET_DATE_TIME (在格式化程序格式化字符串之后不要进行替换)。

原始答案

这分为两个步骤:

将毫秒字符串(我假设从1970-01-01纪元开始)转换为Instant.

  • Convert
  1. Instant到所需的时区,并对其进行格式化。

偏移量有正号或负号,偏移量的标准格式选项包括-+ (不同的是,偏移量零有时写为没有符号的Z )。

代码语言:javascript
复制
    ZoneId zone = ZoneId.of("America/Denver");
    DateTimeFormatter firstShotFormatter
            = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss'Z'xxx");

    String milliseconds = "1136239445000";

    Instant pointInTime = Instant.ofEpochMilli(Long.parseLong(milliseconds));
    String firstShot = pointInTime.atZone(zone).format(firstShotFormatter);
    // Offset should be negative
    if (firstShot.contains("Z-")) {
        // Remove minus sign from formatted offset
        String result = firstShot.replace("Z-", "Z");
        System.out.println("Formatted string: " + result);
    } else {
        throw new IllegalStateException(
                "Don’t know how to format a positive offset from UTC");
    }

格式字符串: 2006-01-02T15:04:05Z07:00

我初步猜测,您对Z07:00的偏移量是指北美山区时间,即1月份的偏移量-07:00。请查收。我不知道如何处理正偏移量,所以我的代码检查它不会发生。

它使用日期和时间部分之间的特征T对ISO8601进行重新采样。但据我所知,ISO8601的偏移量要么是Z (表示零),要么是有符号的,例如-07:00,而不是这两者的混合。您可能需要检查是否可以说服格式化字符串的接收者接受直接的ISO 8601字符串。我会发现这一点要清晰得多,最终对所有各方来说都更容易理解。

链接

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52394812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档