比较日历对象
Comparing calendar objects
我在比较 2 个日历对象时遇到了一些问题。这是我的代码:
String date = "06/19/2015";
Calendar c = Calendar.getInstance();
String days="", months="", years="";
Scanner sc = new Scanner(date);
sc.useDelimiter("/");
while(sc.hasNext()){
months = sc.next();
days = sc.next();
years = sc.next();
}
int day = Integer.parseInt(days);
int month = Integer.parseInt(months);
int year = Integer.parseInt(years);
System.out.println(day+" "+month+" "+year);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.YEAR, year);
if(c.before(cal)){
System.out.println("Victory!");
}
sc.close();
它应该将今天的日期与字符串中的日期进行比较并打印出 'Vicotry!'。问题是,它总是打印出来,即使它不应该...有人可以帮助我吗?
问题是你设置日历月份的方式不对,如果你要手动设置字段,你应该使用日历常量或了解内部工作原理。
您将 june 视为整数值 6 ,但是 callendar 的月份索引为 0 到 11,因此 Calendar.JUNE 将为 5,而不是 6。您的手动日期解析解决方案设置了 Calendar cal
至 7 月(Calendar.JULY
为 6)
我建议使用更简洁的方法,使用 DateFormat
解析日期。您真的不需要使用 Calendar
来获取当前日期。最好使用 new Date()
而不是 Calendar.getInstance()
.
如果您确实想要处理日期的字段,您可以使用 calendarObj.setTime(dateObject)
。
String dateString = "06/19/2015";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar c = Calendar.getInstance();
try {
Date date1 = sdf.parse(dateString);
//makes sense using calendar only if you want to process the date fields
//otherwise use if (new Date().before(date1)){...}
if (c.getTime().before(date1)) {
System.out.println("Victory!");
};
date1.getTime();
} catch (ParseException e) {
System.out.println("Invalid date format");
}
我在比较 2 个日历对象时遇到了一些问题。这是我的代码:
String date = "06/19/2015";
Calendar c = Calendar.getInstance();
String days="", months="", years="";
Scanner sc = new Scanner(date);
sc.useDelimiter("/");
while(sc.hasNext()){
months = sc.next();
days = sc.next();
years = sc.next();
}
int day = Integer.parseInt(days);
int month = Integer.parseInt(months);
int year = Integer.parseInt(years);
System.out.println(day+" "+month+" "+year);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.YEAR, year);
if(c.before(cal)){
System.out.println("Victory!");
}
sc.close();
它应该将今天的日期与字符串中的日期进行比较并打印出 'Vicotry!'。问题是,它总是打印出来,即使它不应该...有人可以帮助我吗?
问题是你设置日历月份的方式不对,如果你要手动设置字段,你应该使用日历常量或了解内部工作原理。
您将 june 视为整数值 6 ,但是 callendar 的月份索引为 0 到 11,因此 Calendar.JUNE 将为 5,而不是 6。您的手动日期解析解决方案设置了 Calendar cal
至 7 月(Calendar.JULY
为 6)
我建议使用更简洁的方法,使用
DateFormat
解析日期。您真的不需要使用 Calendar
来获取当前日期。最好使用 new Date()
而不是 Calendar.getInstance()
.
如果您确实想要处理日期的字段,您可以使用 calendarObj.setTime(dateObject)
。
String dateString = "06/19/2015";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar c = Calendar.getInstance();
try {
Date date1 = sdf.parse(dateString);
//makes sense using calendar only if you want to process the date fields
//otherwise use if (new Date().before(date1)){...}
if (c.getTime().before(date1)) {
System.out.println("Victory!");
};
date1.getTime();
} catch (ParseException e) {
System.out.println("Invalid date format");
}