在Joda DateTime的小数秒内的Unix纪元时间

时间:2015-01-08 06:36:38

标签: java unix datetime jodatime

我有一个以小数秒表示的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

使用在线纪元转换器我转换它没有任何问题。任何人都可以建议我为这个时间戳添加正确的转换字符串吗?

1 个答案:

答案 0 :(得分:3)

我建议您不要使用日期格式化程序,而是使用一些简单的算法:

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);