我有一个以小数秒表示的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
使用在线纪元转换器我转换它没有任何问题。任何人都可以建议我为这个时间戳添加正确的转换字符串吗?
答案 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);