Java正则表达式以SimpleDateFormat模式检测时区



假设使用一些已知的SimpleDateFormat模式每秒解析数千个日期字符串的应用程序。该应用程序需要动态决定每个此类日期模式是否具有时区,即日期模式字符串是否包含,其中任何位置和无引用,字母ZX在上情况下或较低情况(即总计4个符号)。

此类日期模式的示例为:

  • yyyy/mm/dd HH:MM:SS.SSS Z//TimeZone(未引用Z符号)
  • yyyy/mm/dd HH:mm:ss.sss'z'//没有时区(引用Z符号)
  • EEE MMM DD HH:MM:SS X Yyyy//TimeZone(未引用x符号)
  • EEE MMM DD HH:MM:SS'x'yyyy//无时区(引用x符号)

一种方法是使用String类的indexOf()方法,但这意味着在每个日期模式上运行该方法4次(或2,如果日期模式字符串事先转换为上或下情况),再检查是否引用了时区符号(在这种情况下,模式实际上没有时区)。

另一个选择是使用Java正则表达式,例如

String date = ... // Get a SimpleDateFormat pattern
Pattern timezone = Pattern.compile("[^ZzXx]+[^'"][ZzXx]{1}.*");
if (timezone.matcher(date).matches())
{
    // The date pattern does have a timezone
}

是否有上述正则表达式的更快版本,即

  • "[^ZzXx]+[^'"][ZzXx]{1}.*"

或通常更快的方式,通常用于检查SimpleDateFormat模式是否包含时区符号?

我建议尽可能简单地做:

String string = "...";
Pattern p = Pattern.compile("\b(?<!')([xXzZ])(?!')\b");
Matcher m = p.matcher(string);
if (m.find()) {
  String timeZone = m.group(1);
}

相关内容

  • 没有找到相关文章

最新更新