2012-05-15 17 views
6

日付パターン "yyyy-MM-dd"を使用して入力文字列から日付を解析する必要があり、日付が他の形式であればエラーになります。SimpleDateFormat、Javaを使用した不正な日付解析

これは私が日付を解析コードの私の作品です:私はMyDateに該当に入力として「2011年6月12日」のような文字列を持っている場合

private void validateDate() throws MyException { 
    Date parsedDate; 
    String DATE_FORMAT = "yyyy-MM-dd"; 
    try{ 
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate()); 
    System.out.println(parsedDate); 
    } catch (ParseException e) { 
    throw new MyException(“Error occurred while processing date:” + getMyDate()); 
    } 

} 

私は出力を得ます「木9月29日0時00 :00 EEST 2011 "、それは良いです。

「2011-0612」のような不適切な文字列を送信したとき、予想通りにエラーが発生しています。

問題は、2つの "ハイフン"がまだ残っている文字列を渡そうとしているときに始まりますが、桁数が間違っています。 例:

入力文字列「2011-06-1211」 結果「Tue Sep 23 00:00:00 EEST 2014」です。

入力文字列 "2011-1106-12" 結果 "Mon Feb 12 00:00:00 EET 2103"です。

文字列の日付の入力形式を変更できません。

どうすれば避けることができますか?

+1

私は "2011年6月29日00:00:00 EEST 2011"の出力を得る予定です。 9月29日ではなく、出力として6月12日を取得する必要があります... –

答えて

9

SimpleDateFormatsetLenient(false)を電話してみましたか?私はまた、あなたのSimpleDateFormatのタイムゾーンとロケールを設定することをお勧めしたい

import java.util.*; 
import java.text.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     format.setLenient(false); 
     Date date = format.parse("2011-06-1211"); // Throws... 
     System.out.println(date); 
    } 
} 

注意。 (代わりにJoda Timeを代わりに使用してください...)

+0

あなたの答えをありがとう。私はテストを実行し、あなたにフィードバックを与えます。しかし、現時点では問題が解決されたように見えます。 – AndrewVP

+0

simpleDateFormatでは、常に誤った月を返します。その理由は何ですか? –

+0

@AnandSavjani:そうではありません。少しの情報であなたが間違っていることは分かりませんが、 'SimpleDateFormat'はかなり合理的に機能します。それが壊れていると思われる場合は、問題を示す短い完全なプログラムで新しい質問をすることをお勧めします。 –

関連する問題