我必须比较两个日期,其中第一个日期是日历格式,其他日期是字符串(DD-MMM-yyyy)格式。所以我想将其中一个Calendar日期转换为String并使用compareTo方法。
我尝试过使用:
SimpleDateFormat formatter=new SimpleDateFormat("DD-MMM-yyyy");
String currentDate=formatter.format(view.getSelectedDay());
答案 0 :(得分:11)
假设view.getSelectedDay()
返回Calendar
,您可能只想:
String currentDate = formatter.format(view.getSelectedDay().getTime());
(这样您就可以Date
引用传递给format
。)
如果不是问题,请提供更多信息。我怀疑你顺便说一下你也想要“dd”而不是“DD”。 “DD”是年的日期,而“dd”是月的日期,根据SimpleDateFormat
文档。
答案 1 :(得分:1)
答案 2 :(得分:1)
您是在比较这些值以确定一个日期是先于另一个日期还是排序?如果你是因为词典排序,你可能会遇到某些排序问题。
String s = "12-11-2001";
String s2 = "13-11-2000";
int i = s.compareTo(s2);
System.out.println(i);
这个输出是-1,它应该是1,因为s2作为DATE在s之前,但s2在s之后按字典顺序按升序排序。
您可能会发现将字符串日期转换为Date对象更合理,然后使用before()或after()。
答案 3 :(得分:0)
最好的方法是比较我认为的Date
个对象或Calendar
个对象。非常腐烂,它给出了这个:
比较Date
个对象
final Calendar calendarDate = your_date_as_a_Calendar;
final String stringDate = your_date_as_a_String;
final SimpleDateFormat format = new SimpleDateFormat("DD-MMM-yyyy");
final Date dateA = calendarDate.getTime(); // this gives the absolute time, that actually embeds the date!
final Date dateB = format.parse(stringDate);
final int comparison = dateA.compareTo(dateB);
比较Calendar
个对象
final Calendar calendarA = your_date_as_a_Calendar;
final String stringDate = your_date_as_a_String;
final SimpleDateFormat format = new SimpleDateFormat("DD-MMM-yyyy");
final Calendar calendarB = new GregorianCalendar();
calendarB.setTime(format.parse(stringDate));
final int comparison = calendarA.compareTo(calendarB);
然后comparison
< 0
A < B
,> 0
A > B
和== 0
如果相等,则Calendar
{3}}或the documentation of Date。
唯一需要注意的是:
一天中的时间:如果您的String
下注设置为SimpleDateFormat
的同一天,但是不同的时间这将不起作用(我们正在比较瞬间,这里)
String
的模式:它应与TimeZone
的格式相匹配,否则会产生奇怪的结果
区域设置:您的日期可能指的是同一时刻,但如果它们在不同的时区表达则会有所不同!如果您需要处理,则在使用Calendar
时必须处理{{1}}(有关详细信息,请参阅of Calendar和Calendar的文档)。
答案 4 :(得分:0)
将日期比较为字符串时,您应使用SimpleDateFormat("yyyy-MM-dd")
。使用SimpleDateFormat("dd-MM-yyyy")
格式进行比较在大多数情况下都是错误的,因为首先检查最不重要的数字,最后检查最重要的数字。
如果你必须使用dd-MM-yyyy
格式,那么你可以编写一个分割字符串的函数,然后按正确的顺序比较年/月/日,并返回正数,负数或零。
// Compares first date to second date and returns an integer
// can be used in a similar manner as String.CompareTo()
Public Static int CompareDates(String Date1, String Date2) {
String[] splitDate1 = Date1.split("-");
String[] splitDate2 = Date2.split("-");
int ret = -1;
if (splitDate1[2].CompareTo(splitDate2[2]) == 0) {
if (spliDatet1[1].CompareTo(splitDate2[1]) == 0) {
if (splitDate1[0].CompareTo(splitDate2[0]) == 0) {
ret = 0;
}
else if (splitDate1[0].CompareTo(splitDate2[0]) > 0) {
ret = 1;
}
}
else if (splitDate1[1].CompareTo(splitDate2[1]) > 0) {
ret = 1;
}
}
else if (splitDate1[2].CompareTo(splitDate2[2]) > 0) {
ret = 1;
}
Return ret;
}