用Java将POSIX时间转换为Joda时间

时间:2014-06-03 14:51:02

标签: datetime posix jodatime

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)

2 个答案:

答案 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)