【发布时间】:2015-04-15 19:19:43
【问题描述】:
我在 Scala 中有这个 sn-p 代码,使用来自 Java 的 java.util.Date:
val ISO8601Format = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss")
ISO8601Format.setLenient(false)
val currentDate = new Date()
val str = ISO8601Format.format(currentDate)
val dateParsed = ISO8601Format.parse(str)
val dateParsed2 = ISO8601Format.parse(str)
val dateParsed3 = ISO8601Format.parse(str)
println(currentDate.getTime) // 1429124862000
println(dateParsed.getTime) // 1429124862157
println(dateParsed2.getTime) // 1429124862000
println(dateParsed3.getTime) // 1429124862000
ISO 8601 与标准不同,因为我正在实施一个修改后的版本,没有从 UTC 偏移,因为 XML-RPC(我正在实施的协议)使用这种格式。
问题是第一个解析日期总是返回一个与初始日期(currentDate)不同的值(最后三位不同)。但是,如果您解析多次格式化的相同字符串,它们总是返回它应该返回的初始日期。
为什么?一个错误?有什么想法可以解决吗?
(我正在为Scala做一个库,我必须支持Java Dates,请不要推荐Joda-Time。)
【问题讨论】:
-
这看起来很奇怪 - 你能用一个简短但完整的 Java 程序重现它吗?您是否在多个线程中使用该格式?
-
可能是因为您正在以秒为单位解析字符串,但您以毫秒为单位输出。毫秒(最后 3 位)值用于实例化 currentDate 的时间。这并不能解释 dateParsed2 和 dateParsed3 的输出。
-
是的,@Sanj,我以为是这样,但是当我检查 dateParsed2 和 dateParsed3 时,这没有意义。
-
@JonSkeet 你想让我如何重现它?如果你愿意,我可以用正确的进口做一个要点。
-
我没有在多个线程中使用它@JonSkeet,这个要点正在路上