使用SimpleDateFormat将字符串解析为日期,nb毫秒变化

时间:2014-10-22 11:32:44

标签: java parsing date timestamp simpledateformat

我在文本文件的字符串中有这样的日期: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);
                }

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以在包含.的字符串中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解析 milisecond .SSS而不是检索,则必须使用.SS对其进行格式化,否则会返回.076 .76同样的事情发生在其他地方。所以,小心!