我在文本文件的字符串中有这样的日期:String string = 2014-10-03 00:58:59.765
所以我这样解析:
Date timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
.parse(string);
但是,某些时间戳的毫秒数少于3位,并且我收到一个ParseException,试图在它们上使用相同的SimpleDateFormat。编辑:它发生在毫秒为000时。例如:
java.text.ParseException: Unparseable date: "2014-10-03 00:59:49"
这是我的工作:
if (string.length() == 23) {
timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
.parse(string);
} else if (string.length() == 22) {
timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS")
.parse(string);
} else if string.length() == 21) {
timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS")
.parse(string);
} else if (string.length() == 19) {
timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse(string);
}
难道没有更好的方法吗?
最佳答案
您可以借助包含.
的String中的SSS
来决定,并注意它并不总是安全的,因此要小心,因为SSS
可以解析.767
,.76
,.7
毫秒。
Date timestamp = null;
if(string.contains(".")) {
timestamp =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
.parse(string);
} else {
timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse(string);
}
System.out.println(timestamp);
请注意此处,如果您使用
.76
解析毫秒.SSS
而不是在检索期间进行格式化,则必须使用.SS
对其进行格式化,否则它将返回.076
而不是.76
相同的事情也会发生。所以,要小心!