代码之家  ›  专栏  ›  技术社区  ›  sergionni

分析非标准日期格式,如“+0YYYYMMDD”

  •  2
  • sergionni  · 技术社区  · 14 年前

    我有日期,这是我们系统的格式 +0 yyyYMMD

    例如,2011年3月12日是 + 020110312

    现在肯定是 + 符号与一 日期之前,但将来可能不止一个 零点 ,例如 + 000020110312

    有可能用标准的Java来解析它吗? Java.Text .DATEFALID.PARSE(字符串源) ?

    或者我应该编写自定义解析方法?

    谢谢您。

    4 回复  |  直到 14 年前
        1
  •  2
  •   BalusC    14 年前

    如果 +0 前缀是一个常量,然后您可以使用单引号引用它。

    String string = "+020110312";
    Date date = new SimpleDateFormat("'+0'yyyyMMdd").parse(string);
    System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011
    

    (根据我的时区,结果是正确的)

    请注意,月份表示为 MM mm . 这个 毫米 表示分钟。使用 毫米 几个月后会破坏解析结果。

    参见:


    更新 :因为这在未来似乎会有所不同 “但在未来可能会超过一个零” ,您最好考虑用子字符串替换最后8个字符。

    String string = "+020110312";
    Date date = new SimpleDateFormat("yyyyMMdd").parse(string.substring(string.length() - 8));
    System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011
    
        2
  •  4
  •   Bozho    14 年前

    我猜+0是一个时区指示器,所以你可以尝试:

    new SimpleDateFormat("ZyyyyddMM")
    

    唉,这并不能立即奏效。

    要使其工作,请从 0 length - 8 并将其扩展为四位数以满足时区的RFC。见 SimpleDateFormat

        3
  •  0
  •   Grzenio    14 年前

    我将从您的表示中减去最后8个字符,然后解析它。(我不确定你能否安全地避开它)

        4
  •  0
  •   Robby Pond    14 年前

    可以使用simpledateformat分析日期部分。

    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    df.parse("20110312");
    

    但是您需要去掉“+000”前缀。