我在文本文件的字符串中有这样的日期: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相同的事情也会发生。所以,要小心!

09-05 00:26
查看更多