SimpleDateFormat
既知のパターンを使用して、毎秒数千の日付文字列を解析するアプリケーションを想定します。アプリケーションは、そのような各日付パターンにタイムゾーンがあるかどうかを動的に決定する必要があります。つまり、日付パターン文字列のどこかに、引用符なしで大文字Z
または小文字の文字または が含まれているかどうかX
(つまり、合計 4 つの記号) を動的に決定する必要があります。
このような日付パターンの例は次のとおりです。
- yyyy/MM/dd HH:mm:ss.SSS Z // タイムゾーン (引用符で囲まれていない
Z
記号) - yyyy/MM/dd HH:mm:ss.SSS'Z' // タイムゾーンなし (引用
Z
符) - EEE MMM dd HH:mm:ss x yyyy // タイムゾーン (引用符で囲まれていない
x
記号) - EEE MMM dd HH:mm:ss'x'yyyy // タイムゾーンなし (引用
x
符)
indexOf()
これを行う 1 つの方法は、クラスのメソッドを使用することですString
が、これは、メソッドを各日付パターンで 4 回 (日付パターン文字列が事前に大文字または小文字に変換されている場合は 2 回) 実行し、さらにタイムゾーンが正しいかどうかを確認することを意味します。記号が引用されています (この場合、パターンには実際にはタイムゾーンがありません)。
もう 1 つの選択肢は、次のような 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
パターンにタイムゾーン記号が含まれているかどうかを確認するための他のより高速な方法はありますか?