Java日期从一种格式解析到另一种格式

问题描述:

有没有一种方法可以通过类似于.Net的Java来确定日期格式?Java日期从一种格式解析到另一种格式

请看下面的例子:

private String reformatDateString(String dateParam){ 
    if(dateParam == null || dateParam.isEmpty()){ 
     return null; 
    } 
    try{ 
     SimpleDateFormat inDateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     Date fromDate = inDateFormat.parse(dateParam); 

     SimpleDateFormat outDateForm = new SimpleDateFormat("yy-MM-dd"); 
     return outDateForm.format(fromDate); 
    } catch(ParseException e){ 
     e.printStackTrace(); 
     return null; 
    } 
} 

是否有解析器更简单的方法来知道inDateFormat,而不是严格提供两种格式?

我能想到的最好方法是依靠静态方法Date.parse(String)的旧构造函数Date(String)。它可能会也可能不会实际支持这些语法。

Date.parse(String)的Javadoc:

它接受许多语法;特别是它承认IETF标准日期语法:“星期六,1995年8月12日13:30:00 GMT”。它还了解美国大陆的时区缩写,但对于一般用途,应使用时区偏移:“星期六,1995年8月12日13:30:00 GMT + 0430”(格林威治以西4小时30分钟子午线)。如果未指定时区,则假定为本地时区。 GMT和UTC被认为是等同的。

不幸的是这种方法有利于明确要求的日期格式,所以你需要使用一个辅助方法已过时。上面的代码已经是一个很好的开始,所以我建议只扩展你的代码。 .NET日期解析函数的文档可能列出了支持的格式。通过您自己的实施,格式的优先顺序将明确并且不含歧义。

快速搜索发现其他问题,表明SimpleDateFormat是去解析日期的方式。见A non-deprecated exact equivalent of Date(String s) in Java?

我对你的问题感兴趣,所以检查了SimpleDateFormat,DateFormat,Date和Calendar的JavaDoc,看看我能否解决这个问题。

如果您知道传入的日期字符串将始终采用适合当前语言环境的格式,则可以使用DateFormat中的工厂方法GetDateInstance方法。我不得不说不。至少不是我所知。

我会感兴趣地看这个问题。