【问题标题】:Converting Calendar date to string?将日历日期转换为字符串?
【发布时间】:2011-09-06 09:07:50
【问题描述】:
我必须比较两个日期,其中第一个日期是日历格式,另一个是字符串(DD-MMM-yyyy)格式。所以我想将日历日期之一转换为字符串并使用 compareTo 方法。
我尝试过使用:
SimpleDateFormat formatter=new SimpleDateFormat("DD-MMM-yyyy");
String currentDate=formatter.format(view.getSelectedDay());
【问题讨论】:
标签:
java
android
date
calendar
【解决方案1】:
假设view.getSelectedDay() 返回Calendar,您可能只想:
String currentDate = formatter.format(view.getSelectedDay().getTime());
(这样你就有一个Date 引用传递给format。)
如果这不是问题,请提供更多信息。顺便说一下,我怀疑您还想要“dd”而不是“DD”。根据SimpleDateFormat 文档,“DD”是年 日,而“dd”是月 日。
【解决方案2】:
here's您的问题已经解决。无论如何,为什么要通过它们的字符串表示来比较日期?比较像here 这样的日期对象不是更好吗?您可以通过 Calendar 类的 getTime() 方法获取 Date 对象。
【解决方案3】:
您是在比较这些值以确定一个日期是否早于另一个日期,还是进行排序?如果你是,你可能会因为字典排序而与某种排序问题发生冲突。
String s = "12-11-2001";
String s2 = "13-11-2000";
int i = s.compareTo(s2);
System.out.println(i);
this 的输出是 -1,它应该是 1,因为 s2 作为 DATE 在 s 之前,但是当按升序排序时,s2 在字典上在 s 之后。
您可能会发现将字符串日期转换为 Date 对象,然后使用 before() 或 after() 更为明智。
【解决方案4】:
我认为最好比较 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 如果它们相等,根据the documentation of Date 或of Calendar。
您唯一需要注意的是:
一天中的时间:如果您的 Calendar 赌注设置为与您的 String 相同的日期,但如果时间不同,这将不起作用(我们正在比较 即时 , 这里)
SimpleDateFormat 的模式:它应该与你的String 的格式匹配,否则你会得到奇怪的结果
语言环境:您的日期可能指的是同一时刻,但如果它们以不同的时区表示,则它们会有所不同!如果您必须处理该问题,则在使用Calendar 时必须注意TimeZone(有关详细信息,请参阅Calendar 和TimeZone 的文档)。
【解决方案5】:
将日期作为字符串进行比较时,您应该使用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;
}