将未知日期格式的字符串表示转换为Java中的Date

时间:2015-10-14 19:54:00

标签: java datetime jodatime

我有一个代表日期的字符串。 我不知道字符串的日期格式。但仅作为示例,它可能是

中的任何一种
  • 2015-10-14T16:41:42.000Z
  • 2015-10-14T19:01:53.100 + 01:00
  • 2015-10-14 05:20:29

或网站用于在元标记中描述日期的任何有效格式(因此格式将是官方格式,而不是异想天开,但可能性的集合不小)。

我可以使用joda-time来解决这个问题吗? java.util.Date或其他什么?

更新

我想我发现Javascript相当于我要找的东西

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

但我需要 Java 的答案。

1 个答案:

答案 0 :(得分:1)

这不是一个真正的“java”解决方案,但如果您找到了一个Javascript,那么您可以使用ScriptEngine在Java中使用Javascript解决方案。

只是有点快而又脏......:)

这是一个示例代码:

public static void main(String[] args) throws ScriptException, ParseException {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("js");
    String[] dateStrings = new String[] {
            "2015-10-14T16:41:42.000Z",
            "2015-10-14T19:01:53.100+01:00",
            "2015-10-14 05:20:29" };

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    for (String d : dateStrings) {
        String script = "new Date('" + d + "')";
        Object eval = engine.eval(script);
        Date parsed = sdf.parse(eval.toString().replace("[Date ", "").replace("]", ""));
        System.out.println(eval + " -> " + parsed);

    }

}

打印出来:

[Date 2015-10-14T16:41:42.000Z] -> Wed Oct 14 18:41:42 CEST 2015
[Date 2015-10-14T18:01:53.100Z] -> Wed Oct 14 20:01:53 CEST 2015
[Date 2015-10-14T03:20:29.000Z] -> Wed Oct 14 05:20:29 CEST 2015

eval.toString()部分可以明显改进。作为区域设置......