【问题标题】:Calculate date difference in days in Android [duplicate]计算Android中的日期差异[重复]
【发布时间】:2015-11-11 13:44:07
【问题描述】:

我想以天为单位计算两个日期之间的差异。

我有类似的东西:

String deadline = "2015-08-15";

我得到当前日期:

String timeStamp = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());

例如今天的:

2015-11-11

如何计算这两个日期之间的天数?如果日期已过,会发生什么。

【问题讨论】:

  • 这不是重复的,因为我有两个字符串。
  • 并非如此。还没解决。
  • @korunos 您所说的“未解决”是什么意思?您遇到了什么错误?

标签: android datetime


【解决方案1】:

我用这个

public String getDateAgo() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    try {
        Date date = sdf.parse(createdAt);
        Date now = new Date(System.currentTimeMillis());
        long days = getDateDiff(date, now, TimeUnit.DAYS);
        if (days < 7)
            return days + "d";
        else
            return days / 7 + "w";
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return "ERROR";
}

private long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
    long diffInMillies = date2.getTime() - date1.getTime();
    return timeUnit.convert(diffInMillies, TimeUnit.MILLISECONDS);
}

【讨论】:

  • 非常好的解决方案!谢谢!
【解决方案2】:

使用jodatime:

String date1 = "2015-11-11";
String date2 = "2013-11-11";
DateTimeFormatter formatter = new DateTimeFormat.forPattern("yyyy-MM-dd");
DateTime d1 = formatter.parseDateTime(date1);
DateTime d2 = formatter.parseDateTime(date2);
long diffInMillis = d2.getMillis() - d1.getMillis();

Duration duration = new Duration(d1, d2);
int days = duration.getStandardDays();
int hours = duration.getStandardHours();
int minutes = duration.getStandardMinutes();

【讨论】:

    【解决方案3】:

    您可以为此使用Calendar 类。对于过去的时间,您可以将日、月和年传递给日历类,之后您可以将其转换为 milisecond。您可以在当前时间执行此操作。之后您可以将其转换为milisecond。那么milisecond 单位有 2 个值。您可以计算它们的差异,然后您可以再次将此结果milisecond 转换为Date。阅读Calendar 类文档及其方法可能非常有用。

    【讨论】:

      【解决方案4】:

      试试这个,

      public static long getDatesDifferenceInDays(Date startDate,Date endDate) {
          long different = endDate.getTime() - startDate.getTime();
          long secondsInMilli = 1000;
          long minutesInMilli = secondsInMilli * 60;
          long hoursInMilli = minutesInMilli * 60;
          long daysInMilli = hoursInMilli * 24;
          long elapsedDays = different / daysInMilli;
          return elapsedDays;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-10-09
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多