为什么scala org.joda.time.DateTime.parse在给定日期内以millis值截断?

时间:2014-05-30 09:53:41

标签: scala datetime jodatime

我正在尝试解析一些给定的日期字符串:

val strDate = "2014-01-01T00:00:00.000999+00:00"
val dateFormatter = forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZ").withOffsetParsed()
val date = parse(strDate, dateFormatter)

println(date)输出2014-01-01T00:00:00.000ZdateFormatter.print(date)会返回2014-01-01T00:00:00.000000+00:00

我不明白为什么解析器只获得3位小数而不是指定的6位数。有人可以解释一下吗?

编辑:正如@Jesper指出的那样,精度限制为毫秒。

1 个答案:

答案 0 :(得分:4)

打开org.joda.time.base.BaseDateTime课程,您会看到时间编码为:

/** The millis from 1970-01-01T00:00:00Z */
private volatile long iMillis;

您可以通过Joda存储您想要的精度。

另一种方法是使用JSR-310。

  • 如果你有Java 8,它已经包含在内。
  • threeten添加依赖项,然后为较旧的Java版本添加backport。

基类是Instant,具有纳秒精度,请参阅:https://github.com/ThreeTen/threetenbp/blob/master/src/main/java/org/threeten/bp/Instant.java