【问题标题】:Parsing String to Date with SimpleDateFormat, nb of milliseconds varying使用 SimpleDateFormat 将字符串解析为日期,nb 毫秒变化
【发布时间】:2014-12-17 20:16:24
【问题描述】:

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

难道没有更好的方法吗?

【问题讨论】:

  • 2014-10-03 00:58:59.7, 2014-10-03 00:58:59.71, 2014-10-03 00:58:59.716 应该与 yyyy-MM-dd HH 一起使用:毫米:ss.SSS。你能粘贴你得到解析异常的字符串吗?
  • 是的,在毫秒为 000 的情况下:java.text.ParseException: Unparseable date: "2014-10-03 00:59:49"

标签: java parsing date timestamp simpledateformat


【解决方案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);

请注意,如果您使用 .SSS 解析 毫秒 .76,则在检索期间您必须使用 .SS 对其进行格式化,否则它返回 .076 而不是 .76 同样的事情会发生其他。所以,小心点!

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2018-09-17
    相关资源
    最近更新 更多