用 Java 解析任何日期
问题:
尽管广受好评,Joda time 仍需要用户在解析之前手动指定日期格式。有没有一个Java库可以轻松解析多种日期格式,类似于python-dateutil?
答案:
而Python的dateutil库擅长灵活日期解析,在 Java 中获得类似的结果需要务实的方法:
1.正则表达式匹配:
正则表达式提供了识别日期格式模式的强大方法。通过将常见日期格式映射到相应的正则表达式,可以确定给定日期字符串的正确格式。
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"); // … (other format patterns) }}; 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; // Unknown format. }
2.暴力破解:
如果无法通过正则表达式确定日期格式,则可以使用暴力破解作为最后的手段。迭代常见日期格式的集合并尝试解析每个日期字符串。
public static Date parseDate(String dateString) { String dateFormat = determineDateFormat(dateString); if (dateFormat != null) { return new SimpleDateFormat(dateFormat).parse(dateString); } // Brute force using common formats for (String format : COMMON_DATE_FORMATS) { try { return new SimpleDateFormat(format).parse(dateString); } catch (ParseException e) { // Ignore parsing error } } throw new IllegalArgumentException("Invalid date format: " + dateString); }
通过结合正则表达式匹配和强力,可以在 Java 中解析各种日期格式,尽管比 Python 的 dateutil 库稍微多一些。
以上是Java 能否像 Python 的 dateutil 一样灵活地解析日期?的详细内容。更多信息请关注PHP中文网其他相关文章!