【问题标题】:How to use java.time.ZonedDateTime to generate a primitive long value in UTC如何使用 java.time.ZonedDateTime 在 UTC 中生成原始长值
【发布时间】:2015-05-16 13:24:52
【问题描述】:

什么是一种相当有效但最重要的是一种将 UTC 时间戳生成为长值(java 原始类型)的简洁明了的方法。

我只需要精确到最精确的毫秒值。

我更喜欢使用 java.time.ZonedDateTime,因为它是一种获取 UTC 时间戳的简洁方法,并且不需要任何我不想使用的外部日期库,例如 Joda 或 Apache。

构成原始 long 值的 19 位数字将通过示例分解(格式化)如下:

2015  - 4 digit year with range 1000 - 9223. 
      - no zero padding allowed to ensure length is always 
        a 19 digit long value
      - 1000 is the minimum value of a four digit year 
      - 9223 is the maximum value based on first four digits 
        of Long.MAX_VALUE or 9223372036854775807

01    - 2 digit month with range 01 - 12
      - zero padded to ensure 2 digits always
      - jan is 01 and dec is 12

20    - 2 digit day with range 01 - 31
      - zero padded to ensure 2 digits always

07    - 2 digit hour with range 00 - 23
      - zero padded to ensure 2 digits always
      - uses a 24 hour clock  
      - 00 is 12 AM while 23 is 11 PM

00    - 2 digit minute with range 00 - 59
      - zero padded to ensure 2 digits always

00    - 2 digit second with range 00 - 59
      - zero padded to ensure 2 digits always

999   - 3 digit milliseconds with range 000 - 999
      - zero padded to ensure 3 digits always

99    - only 2 digits left over from primitive long. Ignore these as they 
        will be used internally as specialized counters within my program

我的出发点是使用以下内容:

ZonedDateTime value = ZonedDateTime.now( ZoneOffset.UTC );

【问题讨论】:

    标签: java performance coding-style utc type-conversion


    【解决方案1】:
    ZonedDateTime value = ZonedDateTime.now(ZoneOffset.UTC);
    System.out.println(value.get(ChronoField.NANO_OF_SECOND));
    
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
    long time = Long.parseLong(formatter.format(value)) * 100;
    System.out.println(time);
    

    【讨论】:

    • 正是我想要的。我将使用最后两位数字,因此将删除最后的乘法部分,但这正是我想要的。谢谢。
    • @Constantin 乘法部分为您提供了两个额外的数字。只需将您的两位数字号码添加到long。添加将替换由“* 100”产生的00
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2018-02-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多