2013-05-28 5 views
7

私は、これに関していくつかの質問があることを認識しています。しかし、私は特定の日付パターンに問題があります。ここでは例です:文字列からタイムゾーンを抽出する

20130401100000[-03:EST] 

SimpleDateFormatマニュアルに従って、それは4桁の数字を持っている必要があるので、私は-03でtroble抱えています。

yyyyMMddHHmmss'['Z':'z']' 

しかし、理由はそれだけでは動作しません2桁の:私はそれを持っている最も近いパターンはこれでした。ここで私はテストのために使用しているコードサンプルです:

public static void main(String[] args) throws ParseException { 
    String input = "20130401100000[-03:EST]"; 

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'"); 
    df.setTimeZone(TimeZone.getTimeZone("GMT"));  

    System.out.println(df.format(new Date())); 
    System.out.println(df.parse(input)); 
} 

私はnew Date()を印刷するとき、私はこの取得:

20130528155734[+0000:GMT] 

をしかし、私はinputを解析しようとすると、私は次の例外を取得:

Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]" 
at java.text.DateFormat.parse(DateFormat.java:337) 
at Teste.main(Teste.java:17) 

私はどのようににTimeZoneinputを解析することができます知っていますか?

答えて

1

あなたはして書式設定を修正することができます:あなたは間違ってフォーマットされたもので混合正しくフォーマットの日付を持っているだろう場合は、使用でき

public static void main(String[] args) throws ParseException { 
    String input = "20130401100000[-03:EST]"; 

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'"); 
    df.setTimeZone(TimeZone.getTimeZone("GMT"));  

    System.out.println(df.format(new Date())); 
    input = input.replace(":","00:"); 
    System.out.println(df.parse(input)); 
} 

input = input.replaceAll("(\\[[+-]\\d{2}):","$100:"); 
+0

私は 'replaceAll'で溶液を好きには、エレガントなようです。ありがとう:-) –

0

JDK 7は、より新しいパターンをサポートしていますSimpleDateFormat

特に、X文字はISO 8601タイムゾーンのサポートを追加します。

たDateFormatのDF =新しいてSimpleDateFormat( "YYYYMMDDHHMMSS '[' ':' X Z ']'")JDKでこのパターンを試してみてください。

私は次の出力を得ました。

20130602140935 [Z:GMT] 月4月1日午後1時00分00秒GMT 2013

関連する問題