将1401793903.3493562
(Double或String)等POSIX时间戳转换为Java中的Joda DateTime
对象的最准确方法是什么。
POSIX时间是1970-01-01以来的秒数,即上面的数字对应于(python):datetime.fromtimestamp(1401793903.3493562)
=> datetime.datetime(2014, 6, 3, 13, 11, 43, 349356)
答案 0 :(得分:2)
最简单的方法是转换为millis并使用构造函数DateTime(long)
double posixTimestamp = 1401793903.3493562;
long millis = (long) posixTimestamp * 1000;
DateTime date = new DateTime(millis);
答案 1 :(得分:2)
您可以使用此constructor of DateTime。自UNIX纪元以来需要几毫秒而不计算leapseconds,因此它几乎与POSIX时间戳相同。唯一的区别是将秒转换为毫秒的因子为1000。我的建议(使用String而不是double有时可以更精确):
double timestamp = 1401793903.3493562; // in seconds
BigDecimal bd = new BigDecimal(timestamp);
// transform to milliseconds
bd = bd.multiply(new BigDecimal(1000)).setScale(0, RoundingMode.HALF_UP);
// create Joda object
DateTime dt = new DateTime(bd.longValue());
System.out.println(bd); // 1401793903349
System.out.println(dt); // 2014-06-03T13:11:43.349+02:00 (in my timezone)