java SimpleDateFormat 解析毫秒格式错误
java SimpleDateFormat parse millis format error
我想用
解析字符串数据"2016-06-08T10:27:17.369000000000Z"
import java.text.SimpleDateFormat
import scala.util.Try
object TimeParse extends App {
val raw = "2016-06-08T10:27:17.369000000000Z"
private def parseDate(inputdate: String) = {
val fromUser = new SimpleDateFormat("""yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSSSS'Z'""")
val myFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
Try(myFormat.format(fromUser.parse(inputdate)))
}
val r = parseDate(raw)
println("r - " + r)
}
但输出:
r - Success(2016年06月04日 04:27:29)
如果我去掉millis格式就对了,像这样:
object TimeParse extends App {
val raw = "2016-06-08T10:27:17Z"
private def parseDate(inputdate: String) = {
val fromUser = new SimpleDateFormat("""yyyy-MM-dd'T'HH:mm:ss'Z'""")
val myFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
Try(myFormat.format(fromUser.parse(inputdate)))
}
val r = parseDate(raw)
println("r - " + r)
}
输出:
r - Success(2016年06月08日 10:27:17)
为什么毫秒会得到失败的结果?
嗯,SimpleDateFormat
不将秒和毫秒值作为十进制数。
它分别处理它们,因此17.369000000000
不是17秒369毫秒而是17秒369_000_000_000毫秒。
然后将毫秒值截断为 int,因此被解释为 -367_187_456 毫秒,它被添加到您的日期值 (2016-06-08T10:27:17),因此您得到一个时间戳早于您的实际日期。
另见 java.util.Date format SSSSSS: if not microseconds what are the last 3 digits?
我想用
解析字符串数据"2016-06-08T10:27:17.369000000000Z"
import java.text.SimpleDateFormat
import scala.util.Try
object TimeParse extends App {
val raw = "2016-06-08T10:27:17.369000000000Z"
private def parseDate(inputdate: String) = {
val fromUser = new SimpleDateFormat("""yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSSSS'Z'""")
val myFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
Try(myFormat.format(fromUser.parse(inputdate)))
}
val r = parseDate(raw)
println("r - " + r)
}
但输出:
r - Success(2016年06月04日 04:27:29)
如果我去掉millis格式就对了,像这样:
object TimeParse extends App {
val raw = "2016-06-08T10:27:17Z"
private def parseDate(inputdate: String) = {
val fromUser = new SimpleDateFormat("""yyyy-MM-dd'T'HH:mm:ss'Z'""")
val myFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")
Try(myFormat.format(fromUser.parse(inputdate)))
}
val r = parseDate(raw)
println("r - " + r)
}
输出:
r - Success(2016年06月08日 10:27:17)
为什么毫秒会得到失败的结果?
嗯,SimpleDateFormat
不将秒和毫秒值作为十进制数。
它分别处理它们,因此17.369000000000
不是17秒369毫秒而是17秒369_000_000_000毫秒。
然后将毫秒值截断为 int,因此被解释为 -367_187_456 毫秒,它被添加到您的日期值 (2016-06-08T10:27:17),因此您得到一个时间戳早于您的实际日期。
另见 java.util.Date format SSSSSS: if not microseconds what are the last 3 digits?