
用Java 解析任何日期
問題:
儘管廣受好評,Jodatime仍需要使用者在解析之前手動指定日期格式。有沒有一個Java函式庫可以輕鬆解析多種日期格式,類似python-dateutil?
答案:
而Python的dateutil庫擅長彈性日期解析,在 Java中獲得類似的結果需要務實的方法:
1.正規表示式匹配:
正規表示式提供了識別日期格式模式的強大方法。透過將常見日期格式對應到對應的正規表示式,可以確定給定日期字串的正確格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private static final Map<String, String> DATE_FORMAT_REGEXPS = new HashMap<>() {{
put( "^\d{8}$" , "yyyyMMdd" );
put( "^\d{1,2}-\d{1,2}-\d{4}$" , "dd-MM-yyyy" );
put( "^\d{4}-\d{1,2}-\d{1,2}$" , "yyyy-MM-dd" );
}};
public static String determineDateFormat(String dateString) {
for (String regexp : DATE_FORMAT_REGEXPS.keySet()) {
if (dateString.toLowerCase().matches(regexp)) {
return DATE_FORMAT_REGEXPS.get(regexp);
}
}
return null;
}
|
登入後複製
2.暴力破解:
如果無法透過正規表示式確定日期格式,則可以使用暴力破解作為最後的手段。迭代常見日期格式的集合並嘗試解析每個日期字串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static Date parseDate(String dateString) {
String dateFormat = determineDateFormat(dateString);
if (dateFormat != null) {
return new SimpleDateFormat(dateFormat).parse(dateString);
}
for (String format : COMMON_DATE_FORMATS) {
try {
return new SimpleDateFormat(format).parse(dateString);
} catch (ParseException e) {
}
}
throw new IllegalArgumentException( "Invalid date format: " + dateString);
}
|
登入後複製
透過結合正規表示式匹配和強力,可以在 Java 中解析各種日期格式,儘管比 Python 的 dateutil 庫稍微多一些。
以上是Java 能否像 Python 的 dateutil 一樣彈性解析日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!