这可能是一个简单的问题,但我似乎无法找到解决方案。
我有一个长度为8位(纪元秒)的时间字符串,当我尝试使用Java DateFormat格式化它时,它总是假设我的时间也包含毫秒,所以 16315118转换为:4:31:55.118而不是19:58:38的正确时间。
我不想在几毫秒内编辑要添加的字符串,那么我该怎么做呢?
我也不想乘以1000,因为我使用它来格式化包括毫秒的其他时间。
答案 0 :(得分:2)
Java日期是自纪元以来的毫秒数。在将其转换为日期之前将您的值乘以1000。然后,您可以通过创建具有所需格式字符串的新SimpleDateFormat来自定义您使用的DateFormat。
答案 1 :(得分:2)
我也不想乘以1000 因为我用它来格式化 其他时间包括 毫秒。
你运气不好。您不能使用相同的DateFormat格式化两个不同的时间值。使用两种不同的格式化程序或(更正确地)转换您的时间值。
您的时间值应以毫秒为单位,因为这是API所期望的。其他任何东西都是黑客
答案 2 :(得分:1)
乘以1000,然后砍掉字符串的最后4个字符?
答案 3 :(得分:0)
您可以从Javas API here
中找到答案答案 4 :(得分:0)
Instant.ofEpochSecond( 16_315_118L );
1970-07-08T19:58:38Z
你正在使用麻烦的旧类,现在已经遗留下来了,取而代之的是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
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。