将日历日期转换为字符串?

时间:2011-09-06 09:07:50

标签: java android date calendar

我必须比较两个日期,其中第一个日期是日历格式,其他日期是字符串(DD-MMM-yyyy)格式。所以我想将其中一个Calendar日期转换为String并使用compareTo方法。

我尝试过使用:

SimpleDateFormat formatter=new SimpleDateFormat("DD-MMM-yyyy");  
String currentDate=formatter.format(view.getSelectedDay());    

5 个答案:

答案 0 :(得分:11)

假设view.getSelectedDay()返回Calendar,您可能只想:

String currentDate = formatter.format(view.getSelectedDay().getTime());

(这样您就可以Date引用传递给format。)

如果不是问题,请提供更多信息。我怀疑你顺便说一下你也想要“dd”而不是“DD”。 “DD”是的日期,而“dd”是的日期,根据SimpleDateFormat文档。

答案 1 :(得分:1)

here's你的问题已经解决了。无论如何,为什么要通过字符串表示来比较日期?比较像here这样的Date对象不是更好吗?您可以使用Calendar类的getTime()方法获取Date对象。

答案 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 CalendarCalendar的文档)。

答案 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;
}