日期格式,没有毫秒

时间:2009-01-27 16:14:41

标签: java

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

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

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

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

5 个答案:

答案 0 :(得分:2)

Java日期是自纪元以来的毫秒数。在将其转换为日期之前将您的值乘以1000。然后,您可以通过创建具有所需格式字符串的新SimpleDateFormat来自定义您使用的DateFormat。

答案 1 :(得分:2)

  

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

你运气不好。您不能使用相同的DateFormat格式化两个不同的时间值。使用两种不同的格式化程序或(更正确地)转换您的时间值。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您可以从Javas API here

中找到答案

答案 4 :(得分:0)

TL;博士

Instant.ofEpochSecond( 16_315_118L );
  

1970-07-08T19:58:38Z

java.time

你正在使用麻烦的旧类,现在已经遗留下来了,取而代之的是java.time类。

Instant

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

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

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

1970-07-08T19:58:38Z

请参阅live code in IdeOne.com

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore