无法比较android中的两个日期

时间:2016-09-29 13:19:02

标签: java android date calendar

我想将两个日期与类别浏览器历史记录进行比较... 我看过太多帖子但没有得到任何帮助,

我的代码如下:

 private static String calculateDate()
{
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_YEAR, -10);
    return simpleDateFormat.format(new Date(calendar.getTimeInMillis()));
}
private static String today()
{
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_YEAR,0);
    return simpleDateFormat.format(new Date(calendar.getTimeInMillis()));
}

public void getBHistory()
{
    long startdates = 0;
    long enddates = 0;
    Date endDate = null;
    Date startDate=null;

    try
    {
        startDate = (Date)new SimpleDateFormat("yyyy-MM-dd")
                .parse(calculateDate());
        endDate = (Date)new SimpleDateFormat("yyyy-MM-dd")
                .parse(today());
        startdates = startDate.getTime();
        enddates = endDate.getTime();
    } catch (ParseException e)
    {
        e.printStackTrace();
    }

    // 0 = history, 1 = bookmark
    String sel = Browser.BookmarkColumns.BOOKMARK + " = 0" + " AND "
            + Browser.BookmarkColumns.DATE + " BETWEEN ? AND ?";
    Cursor mCur = m_oContext.getContentResolver().query(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, sel,
            new String[]{
                    "" + startdates, "" + enddates
            }, null);
    mCur.moveToFirst();
    String title = "";
    String date_time = "";
    if (mCur.moveToFirst() && mCur.getCount() > 0)
    {
        while (!mCur.isAfterLast())
        {

            title = mCur.getString(mCur
                    .getColumnIndex(Browser.BookmarkColumns.TITLE));
            date_time = mCur.getString(mCur
                    .getColumnIndex(Browser.BookmarkColumns.DATE));
            SimpleDateFormat simpleDate= new SimpleDateFormat("yyyy-MM-dd");
            String curDate=simpleDate.format(new Date(Long.parseLong(date_time)));

            Toast.makeText(m_oContext,"History Time : "+curDate,Toast.LENGTH_SHORT).show();
            Toast.makeText(m_oContext,"Limit Time : "+calculateDate(),Toast.LENGTH_SHORT).show();
            //TODO: Compare these two dates here

            mCur.moveToNext();
        }
    }

} 

如果历史记录日期早于十天,我想要做,然后通知用户。 任何形式的帮助将不胜感激,谢谢。

5 个答案:

答案 0 :(得分:1)

TL;博士

Boolean alertUser = 
    LocalDate.parse( "2016-01-02" )
             .isBefore( 
                 LocalDate.now( ZoneId.of( “America/Montreal” ) )
                          .minusDays( 10 ) 
             ) ;

java.time

您正在使用现在由java.time类取代的麻烦的旧日期时间类。

时区

您的代码在确定日期(例如“今天”)时忽略了时区的关键问题。

示例代码

LocalDate类表示没有时间且没有时区的仅限日期的值。

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

ZoneId z = ZoneId.of( “America/Montreal” );
LocalDate today = LocalDate.now( z );

您的输入字符串采用标准ISO 8601格式。在解析/生成字符串时,默认情况下java.time类使用ISO 8601格式。因此无需指定格式化模式。

LocalDate target = LocalDate.parse( "2016-01-02" );

你说边界是十天前的。使用plusminus方法确定未来/过去的日期。

LocalDate tenDaysAgo = today.minusDays( 10 );

使用compareToequalsisBeforeisAfter方法进行比较。

Boolean alertUser = target.isBefore( tenDaysAgo );

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date.Calendar和& java.text.SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:0)

日历具有可比性,因此您只需使用比较即可。我会把curDate变成日历。如果curDate早于您在今天前十天设置的calculatedDate,那么(curDate.compareTo(calculatedDate) < 0)将为真。

答案 2 :(得分:0)

你可以使用     之前()     要么     后() 将您的计算日期与今天的日期进行比较

答案 3 :(得分:0)

public boolean isHDateEarlier(String historyDate){

      String[] historySplitStrings= historyDate.split("-");
      String[] tenDaysEarlierStrings = calculateDate().split("-");

      int historyYear = Integer.parseInt(historySplitStrings[0]);
      int daysYear = Integer.parseInt(tenDaysEarlierStrings [0]);
      int historyMonth = Integer.parseInt(historySplitStrings[1]);
      int daysMonth = Integer.parseInt(tenDaysEarlierStrings [1]);
      int historyDay = Integer.parseInt(historySplitStrings[2]);
      int daysDay = Integer.parseInt(tenDaysEarlierStrings [2]);


if(historyYear  < daysYear ){//check year
      return true;
}

    if(historyMonth  < daysMonth  &&    
          historyYear   <= daysYear ){//check month
          return true;
    }



  if(historyDay < daysDay && 
        historyYear <= daysYear && 
        historyMonth <= daysMonth){//check day
          return true;
  }

return false;
}

请致电:

isHDateEarlier(curDate);

答案 4 :(得分:-1)

我在一周前比较日期时遇到了问题,并搜索了答案,这对我有帮助:Find nearest date from a list。 - 最后一个回答是关于NavigableSet<>

尝试使用NavigableSet<Date>TreeSet<>,并将日期列入清单。 与lowerhigher

进行比较