代码之家  ›  专栏  ›  技术社区  ›  z -

不带毫秒的日期格式

  •  2
  • z -  · 技术社区  · 16 年前

    这可能是一个简单的问题,但我似乎找不到解决办法。

    我有一个长度为8位的时间字符串(历元秒),当我尝试使用Java数据格式格式化时,它总是假设我的时间也包含毫秒。 16315118转换为:4:31:55.118,而不是19:58:38的正确时间。

    我不想编辑要在毫秒内添加的字符串,那么我该怎么做呢?

    我也不想乘以1000,因为我用它来格式化其他时间,包括毫秒。

    5 回复  |  直到 8 年前
        1
  •  2
  •   Kevin    16 年前

    我也不想乘以1000 因为我用这个来格式化 其他时间包括 毫秒。

    你运气不好。不能使用相同的日期格式来格式化两个不同的时间值。要么使用两个不同的格式化程序,要么(更正确地说)转换时间值。

    您的时间值应该以毫秒为单位,因为这正是API所期望的。其他的都是黑客

        2
  •  2
  •   Paul Tomblin    16 年前

    Java时代是从时代开始的毫秒。将值乘以1000,然后将其转换为日期。然后您可以通过创建新的 SimpleDateFormat 使用所需的格式字符串。

        3
  •  1
  •   Jason S    16 年前

    乘以1000,然后切掉字符串的最后4个字符?

        4
  •  0
  •   Filip Ekberg    16 年前

    您可以从javasAPI中找到答案。 here

        5
  •  0
  •   Community CDub    7 年前

    DR

    Instant.ofEpochSecond( 16_315_118L );
    

    1970年7月8日19:58:38Z

    Java.时间

    您使用的是麻烦的旧类,现在是遗留类,而不是java.time类。

    Instant

    这个 Instant 类表示时间线上的某一时刻 UTC 决议为 nanoseconds (小数点后最多九(9)位)。

    静态方法 ofEpochSecond 将长整数秒转换为日期时间。

    Instant instant = Instant.ofEpochSecond( 16_315_118L );
    System.out.println( "instant.toString(): " + instant );
    

    1970年7月8日19:58:38Z

    live code in IdeOne.com .


    关于JavaTimes

    这个 java.time 框架是在Java 8和之后构建的。这些阶级取代了麻烦的旧阶级。 legacy 日期时间类,如 java.util.Date , Calendar 和; SimpleDateFormat .

    这个 Joda-Time 项目,现在 maintenance mode ,建议迁移到java.time。

    要了解更多信息,请参阅 Oracle Tutorial . 以及搜索堆栈溢出以获得许多示例和解释。规格为 JSR 310 .

    在哪里获取java.time类?

    这个 ThreeTen-Extra Project使用其他类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter more .