【问题标题】: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 Dateof Calendar

        您唯一需要注意的是:

        • 一天中的时间:如果您的 Calendar 赌注设置为与您的 String 相同的日期,但如果时间不同,这将不起作用(我们正在比较 即时 , 这里)

        • SimpleDateFormat 的模式:它应该与你的String 的格式匹配,否则你会得到奇怪的结果

        • 语言环境:您的日期可能指的是同一时刻,但如果它们以不同的时区表示,则它们会有所不同!如果您必须处理该问题,则在使用Calendar 时必须注意TimeZone(有关详细信息,请参阅CalendarTimeZone 的文档)。

        【讨论】:

          【解决方案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;
          }
          

          【讨论】:

            猜你喜欢
            • 2010-09-07
            • 2011-11-28
            • 2015-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多