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

converting string representation of unknown date-format to Date in java

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

中的任何一个

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

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

更新

我想我找到了一个 Java与我正在寻找的脚本等价的脚本

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

但是我需要Java的答案。

嗯,这不是真正的 "java" 解决方案,但如果您找到 Javascript 解决方案,那么您可以使用 java 中的 Javascript 解决方案,使用ScriptEngine.

只是有点快和肮脏......:)

这里有一个示例代码:

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() 部分可以明显改进。作为区域设置...