我有一个以小数秒表示的unix时间戳,我需要将其转换为joda DateTime,但我一直在寻找正确的转换格式。值看起来像这样 1403533177.806899,当我尝试解析它时,我收到以下异常
java.lang.IllegalArgumentException: Invalid format: "1403533177.806899" is malformed at "7.806899"
这是我正在使用的代码
DateTimeFormatter dtf = DateTimeFormat.forPattern(format);
dtf.parseDateTime(value);
我使用了以下转换格式
yyyyMMddHHmmss
yyyy-MM-dd HH:mm:ss.SSS
使用在线纪元转换器我在转换它时没有任何问题。谁能建议我这个时间戳的正确转换字符串?
最佳答案
我建议您不要使用日期格式化程序,而是使用一些简单的算术:
long millis = Math.round(value * 1000);
DateTime dt = new DateTime(millis, DateTimeZone.forOffsetHours(0));
这会将给定的秒和微秒四舍五入到最接近的毫秒,并据此创建一个新的 DateTime
实例。
您有一个以秒为单位的纪元时间戳,而 JodaTime DateTime
内部表示也是一个以毫秒为单位的纪元时间戳。
格式化程序将人类可读的日期和时间转换为纪元,因此这实际上不是您所需要的,它只是一个很长的路要走。
如果稍后需要打印该值,则可以使用 DateTimeFormatter
:
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSSz");
dtf.print(dt);
关于java - Unix 纪元时间(以秒为单位)转换为 Joda DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27834298/