2016-05-30 4 views
1

特定の年の前にのみ文字列を処理するメソッドがあります。しかし、私は動作させることができないようです - 私は比較が正しく行われているとは思わない。誰かが、比較がわずか数年間どのように行われているかを私に見せてもらえるか? Joda timeが優れている場合は、また、どのように特定の年の前に条件文を作成する方法

文字列は、英国の日付形式の例である(ちょうどジョダ時間を使用するように私に言うのではなく)表示することができます16/02/2006

マイコード:

DateFormat df = new SimpleDateFormat("yyyy"); 
Date yearOnReport = df.parse(startDateString); 
Date threshold = df.parse("2006") 
if (yearOnReport<threshold){ 
...\\Do some stuff 
} 
+0

しきい値が正しい単語ではありません私は、閾値は<=のように包括的であるためだと思います。 <のように排他的なので、代わりにtooLateを使用してください。 –

+0

Java 8を使用していますか?もしそうなら、Jodaから派生した 'java.time'クラスを使うべきです。 –

答えて

3

LocalDateDateTimeFormatter使用します:あなたは、以前のバージョンをサポートする必要がある場合

String startDateString = "16/02/2006"; 

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu"); 
LocalDate localDate = LocalDate.parse(startDateString, dateTimeFormatter); 
if (localDate.getYear() < 2006) { 
    // code here 
} 

DateFormat df = new SimpleDateFormat("yyyy"); 
Date yearOnReport = df.parse(startDateString); 
Date threshold = df.parse("2006") 
if (yearOnReport<threshold){ 
...\\Do some stuff 
} 

は、このであるべきJava、CalendarSimpleDateFormat

String startDateString = "16/02/2006"; 

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
Date date = simpleDateFormat.parse(startDateString); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 
if (calendar.get(Calendar.YEAR) < 2006) { 
    // code here 
} 

のJava 7では、あなたはThreeTen projectから新しいjava.time APIのバックポートを取得することにより、それをJavaの8道を行うことができます。
利点:コードは、代わりのJava 8に

余分なライブラリを必要とせずに、Javaの8にアップグレードする際に、後で、仕事Joda-Timeを追加し、そのLocalDateDateTimeFormat使用します。

String startDateString = "16/02/2006"; 

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy"); 
LocalDate localDate = formatter.parseLocalDate(startDateString); 
if (localDate.getYear() < 2006) { 
    // code here 
} 
+0

素晴らしいそれは治療を働いた –

0

あなたがすることはできませんリレーショナル演算子と日付を比較します。

Date#compareToメソッドを使用できます。

+0

if(yearOnReport.before(threshold)){} –

+0

このメソッドを使用することもできます。 –

0

before()論理演算子はプリミティブ型でのみ使用できます。

これます。Java 8で

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
Date yearOnReport = df.parse(startDateString); 
Date threshold = df.parse("2006") 
if (yearOnReport.before(threshold)){ 
...\\Do some stuff 
} 
+0

OPがJava 8を使用していない限り、Jodaが/ inspiredから派生した組み込み 'java.time'クラスを使用する必要があります。 –

+0

解析エラーです。なぜなら、 "文字列は英国の日付形式、例えば' 16/02/2006' *です。 – Andreas

関連する問題