如何在特定年份之前创建条件语句

时间:2016-05-30 05:49:13

标签: java date

我有一个方法应该只在特定年份之前处理字符串。但是我似乎无法让事情发挥作用 - 我认为比较没有正确完成。有人可以告诉我这些比较是如何进行的。如果import com.awesomeapps.misael.simplecalculator.R;更好,你还可以展示如何(而不是告诉我只使用joda时间)

该字符串采用英国日期格式,例如Joda time

我的代码:

16/02/2006

3 个答案:

答案 0 :(得分:3)

在Java 8中,使用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
}

如果您需要支持旧版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的backport来实现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
}

答案 1 :(得分:0)

您无法将日期与关系运算符进行比较。

您可以使用Date#compareTo方法。

答案 2 :(得分:0)

使用before()逻辑运算符仅适用于基本类型。

此:

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

应该是这样的:

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