我有一个方法应该只在特定年份之前处理字符串。但是我似乎无法让事情发挥作用 - 我认为比较没有正确完成。有人可以告诉我这些比较是如何进行的。如果import com.awesomeapps.misael.simplecalculator.R;
更好,你还可以展示如何(而不是告诉我只使用joda时间)
该字符串采用英国日期格式,例如Joda time
我的代码:
16/02/2006
答案 0 :(得分:3)
在Java 8中,使用LocalDate
和DateTimeFormatter
:
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,请使用Calendar
和SimpleDateFormat
:
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并使用其LocalDate
和DateTimeFormat
:
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
}