java - Unix 纪元时间(以秒为单位)转换为 Joda DateTime

标签 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

使用在线纪元转换器我在转换它时没有任何问题。谁能建议我这个时间戳的正确转换字符串?

最佳答案

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

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/

相关文章:

java - 将 ArrayList 转换为数组(有点不同)

linux - 是否有任何与 Unix 'magic' 命令兼容的文件类型的 `file` header 集合?

c++ - POSIX/UNIX : How to reliably close a file descriptor

python - 从 Bash 使用 STDIN 运行 Python

java - 从 java 执行的 rsync 返回文件未找到错误

java - 调用 super()

c# - 如何在没有周末的情况下获得 DateTime.DaysInMonth?

c# - 如何以当前区域性格式的默认值从 Noda Time OffsetDateTime 生成 DateTimeOffset 字符串?

格式正确的 Java Freemarker 模板日期时间

java - 提交表单时出错:Data truncation: Incorrect datetime