Android / Java-日期差异(天)


80

我正在使用以下代码获取当前日期(格式为12/31/1999,即mm / dd / yyyy):

Textview txtViewData;
txtViewDate.setText("Today is " +
        android.text.format.DateFormat.getDateFormat(this).format(new Date()));

我还有另一个日期格式为:2010-08-25(即yyyy / mm / dd),

所以我想找出日期之间的天数差异,如何找到天数上的差异?

(换句话说,我想找出当前日期-yyyy / mm / dd格式化日期之间的差异)


这段代码使用了麻烦的旧日期时间类,而现在却被java.time类取代了。对于较旧的Java和Android,请参见ThreeTen- BackportThreeTenABP项目。
罗勒·布尔克

相似的问题,但使用的是时刻而不是整个日期:Android中的日期差(天)
Basil Bourque,

Answers:


126

并不是真正可靠的方法,最好使用JodaTime

  Calendar thatDay = Calendar.getInstance();
  thatDay.set(Calendar.DAY_OF_MONTH,25);
  thatDay.set(Calendar.MONTH,7); // 0-11 so 1 less
  thatDay.set(Calendar.YEAR, 1985);

  Calendar today = Calendar.getInstance();

  long diff = today.getTimeInMillis() - thatDay.getTimeInMillis(); //result in millis

这是一个近似值...

long days = diff / (24 * 60 * 60 * 1000);

要从字符串中解析日期,您可以使用

  String strThatDay = "1985/08/25";
  SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
  Date d = null;
  try {
   d = formatter.parse(strThatDay);//catch exception
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 


  Calendar thatDay = Calendar.getInstance();
  thatDay.setTime(d); //rest is the same....

但是,由于您确定日期格式,因此您也可以Integer.parseInt()在子字符串上执行操作以获取其数字值。


@stOle thanx,但是我两个日期都在字符串中,所以我该怎么做,请让我详细知道,请
Paresh Mayani 2010年

1
@stOle没有得到确切的答案,可能是您的代码中的小错误,即使我将String strThatDay =“ 2010/10/03”设置为字符串,我也会有274天的间隔;应该只有1天,thanx支持
Paresh Mayani

@Paresh,很抱歉,该月份("yyyy/mm/dd");应替换("yyyy/MM/dd");为大写的M,分钟应替换为小写。已更正。
st0le 2010年

1
@Gevorg,我确实推荐了它。:) Me Gusta JodaTime
st0le 2012年

3
有时,由于毫秒数舍入问题(缺少舍入问题),该代码可能会休息一天。这对我Math.round(millisBetweenDates * 1f / TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));
有用

83

这不是我的工作,在这里找到了答案。不想在将来断开链接:)。

关键是考虑日光设置的这一行,请参阅完整代码。

TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));

或尝试通过TimeZone 作为参数来daysBetween()和呼叫setTimeZone()sDateeDate对象。

因此,它去了:

public static Calendar getDatePart(Date date){
    Calendar cal = Calendar.getInstance();       // get calendar instance
    cal.setTime(date);      
    cal.set(Calendar.HOUR_OF_DAY, 0);            // set hour to midnight
    cal.set(Calendar.MINUTE, 0);                 // set minute in hour
    cal.set(Calendar.SECOND, 0);                 // set second in minute
    cal.set(Calendar.MILLISECOND, 0);            // set millisecond in second
    
    return cal;                                  // return the date part
}

这里获取的getDatePart()

/**
 * This method also assumes endDate >= startDate
**/
public static long daysBetween(Date startDate, Date endDate) {
  Calendar sDate = getDatePart(startDate);
  Calendar eDate = getDatePart(endDate);

  long daysBetween = 0;
  while (sDate.before(eDate)) {
      sDate.add(Calendar.DAY_OF_MONTH, 1);
      daysBetween++;
  }
  return daysBetween;
}

细微差别查找两个日期之间的差异并不像减去两个日期并将结果除以(24 * 60 * 60 * 1000)一样简单。事实上,它是错误的!

例如:两个日期03/24/2007和03/25/2007之差应为1天;但是,使用上述方法,在英国,您将获得0天!

自己看看(下面的代码)。毫秒级将导致舍入错误,一旦出现诸如夏令时之类的小信息,这些错误就变得最明显。

完整代码:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class DateTest {

public class DateTest {

static SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");

public static void main(String[] args) {

  TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));

  //diff between these 2 dates should be 1
  Date d1 = new Date("01/01/2007 12:00:00");
  Date d2 = new Date("01/02/2007 12:00:00");

  //diff between these 2 dates should be 1
  Date d3 = new Date("03/24/2007 12:00:00");
  Date d4 = new Date("03/25/2007 12:00:00");

  Calendar cal1 = Calendar.getInstance();cal1.setTime(d1);
  Calendar cal2 = Calendar.getInstance();cal2.setTime(d2);
  Calendar cal3 = Calendar.getInstance();cal3.setTime(d3);
  Calendar cal4 = Calendar.getInstance();cal4.setTime(d4);

  printOutput("Manual   ", d1, d2, calculateDays(d1, d2));
  printOutput("Calendar ", d1, d2, daysBetween(cal1, cal2));
  System.out.println("---");
  printOutput("Manual   ", d3, d4, calculateDays(d3, d4));
  printOutput("Calendar ", d3, d4, daysBetween(cal3, cal4));
}


private static void printOutput(String type, Date d1, Date d2, long result) {
  System.out.println(type+ "- Days between: " + sdf.format(d1)
                    + " and " + sdf.format(d2) + " is: " + result);
}

/** Manual Method - YIELDS INCORRECT RESULTS - DO NOT USE**/
/* This method is used to find the no of days between the given dates */
public static long calculateDays(Date dateEarly, Date dateLater) {
  return (dateLater.getTime() - dateEarly.getTime()) / (24 * 60 * 60 * 1000);
}

/** Using Calendar - THE CORRECT WAY**/
public static long daysBetween(Date startDate, Date endDate) {
  ...
}

输出:

手册-2007年1月1日至2007年1月2日之间的天数是:1

日历-2007年1月1日至2007年1月2日之间的天数是:1


手册-2007年3月24日至2007年3月25日之间的天数是:0

日历-2007年3月24日至2007年3月25日之间的天数是:1


同意。使用顶级方法您将获得更可靠,更优雅的解决方案。谢谢!
罗杰·外星人2012年

对于方法:daysBetween如果日期是2012年7月24日的15:00和endDate是2012年7月24日的16:00-那么日期是在endDate之前,但是不是整天,而是一小时。在这种情况下,我是否缺少某些东西,或者daysBetween的结果是否错误(因为预期结果为零,但使用给定的计算结果应为1而不是零)?
AgentKnopf 2012年

@Zainodis,在我的头顶上方,我更新了代码。我想这应该可以解决问题。
塞缪尔

@SamQuest感谢您的更新!我采用了一种更幼稚的方法:如果开始和结束在同一天,月份和年份,则sDate.before(eDate)的while循环将停止并返回结果。这还可以确保,如果在第一次迭代中,开始和结束位于同一天/月/年(尽管时间开始于结束),则正确返回零。
AgentKnopf 2012年

先生,您该当个钟声!
marienke 2014年

38

大多数答案都很好,很适合您的问题

所以我想找出天数之间的日期差异,如何找到天数之间的差异?

我建议这种非常简单明了的方法,可以确保在任何时区为您提供正确的时差:

int difference= 
((int)((startDate.getTime()/(24*60*60*1000))
-(int)(endDate.getTime()/(24*60*60*1000))));

就是这样!


这也为我工作..另一些人太复杂,方法准确:)
亚洲时报Siddharth

1
如果先减去后再除法以防止除法两次会更好。
ravindu1024

@ ravindu1024如果startDate小于endDate,则这样做的差异为+1。在这种情况下,存在+1差异。可以通过在答案上加上-1来解决。
s17年

@sHOLE怎么样?我的意思是您应该执行(t1-t2)/ C,而不是t1 / C-t2 / C。由于t1 / C和t2 / C都不为零,所以我看不到它将如何影响答案。
ravindu1024

@ ravindu1024我了解您要说的内容,并且在阅读此答案时也想知道同样的内容。只是在实施后,我才注意到为什么不这样做(我上面提到的原因)。
s17年

25

使用jodatime API

Days.daysBetween(start.toDateMidnight() , end.toDateMidnight() ).getDays() 

其中“开始”和“结束”是您的DateTime对象。要将日期字符串解析为DateTime对象,请使用parseDateTime方法

还有一个特定于Android的JodaTime库


3
thanx的支持,但如果通过Android / JAVA代码完成,则不愿意使用其他API
Paresh Mayani 2010年

2
乔达+1。Java Calendar API糟透了,Joda干净漂亮。
LuxuryMode 2012年

JodaTime在Android中的多个设备上给出了一些错误,我不知道为什么,我有一些问题
josemwarrior 2015年

1
Joda时间库将为您的项目添加4744个方法。如果要避免65K方法限制,请明智地选择。
Lior Iluz 2015年

14

该片段占夏时制时间,为O(1)。

private final static long MILLISECS_PER_DAY = 24 * 60 * 60 * 1000;

private static long getDateToLong(Date date) {
    return Date.UTC(date.getYear(), date.getMonth(), date.getDate(), 0, 0, 0);
}

public static int getSignedDiffInDays(Date beginDate, Date endDate) {
    long beginMS = getDateToLong(beginDate);
    long endMS = getDateToLong(endDate);
    long diff = (endMS - beginMS) / (MILLISECS_PER_DAY);
    return (int)diff;
}

public static int getUnsignedDiffInDays(Date beginDate, Date endDate) {
    return Math.abs(getSignedDiffInDays(beginDate, endDate));
}

6

这对我来说是最简单,最好的计算方法,可能对您来说很合适。

       try {
            /// String CurrDate=  "10/6/2013";
            /// String PrvvDate=  "10/7/2013";
            Date date1 = null;
            Date date2 = null;
            SimpleDateFormat df = new SimpleDateFormat("M/dd/yyyy");
            date1 = df.parse(CurrDate);
            date2 = df.parse(PrvvDate);
            long diff = Math.abs(date1.getTime() - date2.getTime());
            long diffDays = diff / (24 * 60 * 60 * 1000);


            System.out.println(diffDays);

        } catch (Exception e1) {
            System.out.println("exception " + e1);
        }

@PareshMayani刚签到日志猫
Rishi Gautam

3

Correct Way萨姆任务的回答只有当第一个日期比第二早期的作品。此外,如果两个日期在一天之内,它将返回1。

这是最适合我的解决方案。与大多数其他解决方案一样,由于错误的日光节省偏移量,一年中的两天仍然会显示错误的结果。

private final static long MILLISECS_PER_DAY = 24 * 60 * 60 * 1000;

long calculateDeltaInDays(Calendar a, Calendar b) {

    // Optional: avoid cloning objects if it is the same day
    if(a.get(Calendar.ERA) == b.get(Calendar.ERA) 
            && a.get(Calendar.YEAR) == b.get(Calendar.YEAR)
            && a.get(Calendar.DAY_OF_YEAR) == b.get(Calendar.DAY_OF_YEAR)) {
        return 0;
    }
    Calendar a2 = (Calendar) a.clone();
    Calendar b2 = (Calendar) b.clone();
    a2.set(Calendar.HOUR_OF_DAY, 0);
    a2.set(Calendar.MINUTE, 0);
    a2.set(Calendar.SECOND, 0);
    a2.set(Calendar.MILLISECOND, 0);
    b2.set(Calendar.HOUR_OF_DAY, 0);
    b2.set(Calendar.MINUTE, 0);
    b2.set(Calendar.SECOND, 0);
    b2.set(Calendar.MILLISECOND, 0);
    long diff = a2.getTimeInMillis() - b2.getTimeInMillis();
    long days = diff / MILLISECS_PER_DAY;
    return Math.abs(days);
}

3

最好,最简单的方法

  public int getDays(String begin) throws ParseException {
     long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);

    long begin = dateFormat.parse(begin).getTime();
    long end = new Date().getTime(); // 2nd date want to compare
    long diff = (end - begin) / (MILLIS_PER_DAY);
    return (int) diff;
}

3

tl; dr

ChronoUnit.DAYS.between( 
    LocalDate.parse( "1999-12-28" ) , 
    LocalDate.parse( "12/31/1999" , DateTimeFormatter.ofPattern( "MM/dd/yyyy" ) ) 
)

细节

其他答案已过时。事实证明,与最早的Java版本捆绑在一起的旧的日期时间类设计不佳,令人困惑且麻烦。避免他们。

java.time

Joda-Time项目成功取代了那些旧班级。这些类 为Java 8及更高版本中内置的java.time框架提供了灵感。

多的java.time功能后移植到Java 6和7在ThreeTen-反向移植和在进一步适于到Android ThreeTenABP

LocalDate

LocalDate级表示没有时间一天和不同时区的日期,唯一的价值。

解析字符串

如果您输入的字符串为标准ISO 8601格式,则LocalDate该类可以直接解析该字符串。

LocalDate start = LocalDate.parse( "1999-12-28" );

如果不是ISO 8601格式,请使用定义格式格式DateTimeFormatter

String input = "12/31/1999";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM/dd/yyyy" );
LocalDate stop = LocalDate.parse( input , formatter );

经过的天数 ChronoUnit

现在,获得该对LocalDate对象之间经过的天数。该ChronoUnit枚举计算经过的时间。

long totalDays = ChronoUnit.DAYS.between( start , stop ) ; 

如果您不熟悉Java枚举,请知道它们比大多数其他编程语言中的常规枚举更加强大和有用。请参阅Enum课程doc,Oracle教程Wikipedia以了解更多信息。


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

在哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容打下了基础。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多


Android不支持
java.time.LocalDate

1
@MahdiAstanei重新阅读有关Android的ThreeTenABP库的第三段。物有所值,因为旧的日期时间类确实很糟糕。
罗勒·布尔克

2

使用以下功能:

   /**
     * Returns the number of days between two dates. The time part of the
     * days is ignored in this calculation, so 2007-01-01 13:00 and 2007-01-02 05:00
     * have one day inbetween.
     */
    public static long daysBetween(Date firstDate, Date secondDate) {
        // We only use the date part of the given dates
        long firstSeconds = truncateToDate(firstDate).getTime()/1000;
        long secondSeconds = truncateToDate(secondDate).getTime()/1000;
        // Just taking the difference of the millis.
        // These will not be exactly multiples of 24*60*60, since there
        // might be daylight saving time somewhere inbetween. However, we can
        // say that by adding a half day and rounding down afterwards, we always
        // get the full days.
        long difference = secondSeconds-firstSeconds;
        // Adding half a day
        if( difference >= 0 ) {
            difference += SECONDS_PER_DAY/2; // plus half a day in seconds
        } else {
            difference -= SECONDS_PER_DAY/2; // minus half a day in seconds
        }
        // Rounding down to days
        difference /= SECONDS_PER_DAY;

        return difference;
    }

    /**
     * Truncates a date to the date part alone.
     */
    @SuppressWarnings("deprecation")
    public static Date truncateToDate(Date d) {
        if( d instanceof java.sql.Date ) {
            return d; // java.sql.Date is already truncated to date. And raises an
                      // Exception if we try to set hours, minutes or seconds.
        }
        d = (Date)d.clone();
        d.setHours(0);
        d.setMinutes(0);
        d.setSeconds(0);
        d.setTime(((d.getTime()/1000)*1000));
        return d;
    }

2

有一个简单的解决方案,至少对我来说,这是唯一可行的解​​决方案。

问题在于,我看到的所有答案(使用Joda,Calendar,Date或其他任何东西)都只会考虑毫秒数。他们最终计算出两个日期之间的24小时周期,而不是实际的天数。因此,从1月1日晚上11点到1月2日上午1点之间的时间将返回0天。

要计算startDate和之间的实际天数endDate,只需执行以下操作:

// Find the sequential day from a date, essentially resetting time to start of the day
long startDay = startDate.getTime() / 1000 / 60 / 60 / 24;
long endDay = endDate.getTime() / 1000 / 60 / 60 / 24;

// Find the difference, duh
long daysBetween = endDay - startDay;

这将在1月2日到1月1日之间返回“ 1”。如果需要计算结束日期,只需将1加daysBetween(由于我想计算范围内的总天数,所以我需要在代码中执行此操作)。

这有点类似于Daniel的建议,但我想代码较小。


2

所有这些解决方案都具有两个问题之一。由于四舍五入错误,leap日和秒等原因,该解决方案不是十分准确,或者您最终在两个未知日期之间循环了几天。

该解决方案解决了第一个问题,并将第二个问题提高了大约365倍,如果您知道最大范围,则更好。

/**
 * @param thisDate
 * @param thatDate
 * @param maxDays
 *            set to -1 to not set a max
 * @returns number of days covered between thisDate and thatDate, inclusive, i.e., counting both
 *          thisDate and thatDate as an entire day. Will short out if the number of days exceeds
 *          or meets maxDays
 */
public static int daysCoveredByDates(Date thisDate, Date thatDate, int maxDays) {
    //Check inputs
    if (thisDate == null || thatDate == null) {
        return -1;
    }

    //Set calendar objects
    Calendar startCal = Calendar.getInstance();
    Calendar endCal = Calendar.getInstance();
    if (thisDate.before(thatDate)) {
        startCal.setTime(thisDate);
        endCal.setTime(thatDate);
    }
    else {
        startCal.setTime(thatDate);
        endCal.setTime(thisDate);
    }

    //Get years and dates of our times.
    int startYear = startCal.get(Calendar.YEAR);
    int endYear = endCal.get(Calendar.YEAR);
    int startDay = startCal.get(Calendar.DAY_OF_YEAR);
    int endDay = endCal.get(Calendar.DAY_OF_YEAR);

    //Calculate the number of days between dates.  Add up each year going by until we catch up to endDate.
    while (startYear < endYear && maxDays >= 0 && endDay - startDay + 1 < maxDays) {
        endDay += startCal.getActualMaximum(Calendar.DAY_OF_YEAR); //adds the number of days in the year startDate is currently in
        ++startYear;
        startCal.set(Calendar.YEAR, startYear); //reup the year
    }
    int days = endDay - startDay + 1;

    //Honor the maximum, if set
    if (maxDays >= 0) {
        days = Math.min(days, maxDays);
    }
    return days;
}

如果您需要日期间的天(uninclusive后者日),刚刚摆脱的+ 1,当你看到endDay - startDay + 1


1

另一种方式:

public static int numberOfDaysBetweenDates(Calendar fromDay, Calendar toDay) {
        fromDay = calendarStartOfDay(fromDay);
        toDay = calendarStartOfDay(toDay);
        long from = fromDay.getTimeInMillis();
        long to = toDay.getTimeInMillis();
        return (int) TimeUnit.MILLISECONDS.toDays(to - from);
    }

请对您提供的代码发表评论。这样人们就能理解您代码的含义。
Abed Putra

1

使用这些功能

    public static int getDateDifference(int previousYear, int previousMonthOfYear, int previousDayOfMonth, int nextYear, int nextMonthOfYear, int nextDayOfMonth, int differenceToCount){
    // int differenceToCount = can be any of the following
    //  Calendar.MILLISECOND;
    //  Calendar.SECOND;
    //  Calendar.MINUTE;
    //  Calendar.HOUR;
    //  Calendar.DAY_OF_MONTH;
    //  Calendar.MONTH;
    //  Calendar.YEAR;
    //  Calendar.----

    Calendar previousDate = Calendar.getInstance();
    previousDate.set(Calendar.DAY_OF_MONTH, previousDayOfMonth);
    // month is zero indexed so month should be minus 1
    previousDate.set(Calendar.MONTH, previousMonthOfYear);
    previousDate.set(Calendar.YEAR, previousYear);

    Calendar nextDate = Calendar.getInstance();
    nextDate.set(Calendar.DAY_OF_MONTH, previousDayOfMonth);
    // month is zero indexed so month should be minus 1
    nextDate.set(Calendar.MONTH, previousMonthOfYear);
    nextDate.set(Calendar.YEAR, previousYear);

    return getDateDifference(previousDate,nextDate,differenceToCount);
}
public static int getDateDifference(Calendar previousDate,Calendar nextDate,int differenceToCount){
    // int differenceToCount = can be any of the following
    //  Calendar.MILLISECOND;
    //  Calendar.SECOND;
    //  Calendar.MINUTE;
    //  Calendar.HOUR;
    //  Calendar.DAY_OF_MONTH;
    //  Calendar.MONTH;
    //  Calendar.YEAR;
    //  Calendar.----

    //raise an exception if previous is greater than nextdate.
    if(previousDate.compareTo(nextDate)>0){
        throw new RuntimeException("Previous Date is later than Nextdate");
    }

    int difference=0;
    while(previousDate.compareTo(nextDate)<=0){
        difference++;
        previousDate.add(differenceToCount,1);
    }
    return difference;
}

这段代码使用了麻烦的旧日期时间类,而现在却被java.time类所取代。对于较旧的Java和Android,请参见ThreeTen- BackportThreeTenABP项目。
罗勒·布尔克

日历班是旧的日期时间班吗?
尼尔·泽德拉夫(Neal zedlav)

是的,在java.time包外部找到的任何与日期时间相关的类现在都是旧的,应避免使用。这包括DateCalendar以及java.sql类。请参阅《 Oracle教程》。
罗勒·布尔克

1
        public void dateDifferenceExample() {

        // Set the date for both of the calendar instance
        GregorianCalendar calDate = new GregorianCalendar(2012, 10, 02,5,23,43);
        GregorianCalendar cal2 = new GregorianCalendar(2015, 04, 02);

        // Get the represented date in milliseconds
        long millis1 = calDate.getTimeInMillis();
        long millis2 = cal2.getTimeInMillis();

        // Calculate difference in milliseconds
        long diff = millis2 - millis1;

        // Calculate difference in seconds
        long diffSeconds = diff / 1000;

        // Calculate difference in minutes
        long diffMinutes = diff / (60 * 1000);

        // Calculate difference in hours
        long diffHours = diff / (60 * 60 * 1000);

        // Calculate difference in days
        long diffDays = diff / (24 * 60 * 60 * 1000);
    Toast.makeText(getContext(), ""+diffSeconds, Toast.LENGTH_SHORT).show();


}

0

我找到了一种非常简单的方法来执行此操作,这就是我在应用程序中使用的方法。

假设您在“时间”对象中有日期(或其他,我们只需要毫秒):

Time date1 = initializeDate1(); //get the date from somewhere
Time date2 = initializeDate2(); //get the date from somewhere

long millis1 = date1.toMillis(true);
long millis2 = date2.toMillis(true);

long difference = millis2 - millis1 ;

//now get the days from the difference and that's it
long days = TimeUnit.MILLISECONDS.toDays(difference);

//now you can do something like
if(days == 7)
{
    //do whatever when there's a week of difference
}

if(days >= 30)
{
    //do whatever when it's been a month or more
}

0

乔达时代

最好的方法是使用Joda-Time,这是您将添加到项目中的非常成功的开源库。

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();

如果您使用的是Android Studio,则很容易添加joda-time。在您的build.gradle(应用程序)中:

dependencies {
  compile 'joda-time:joda-time:2.4'
  compile 'joda-time:joda-time:2.4'
  compile 'joda-time:joda-time:2.2'
}

好答案。请注意,调用toStringDuration生成的一个String表示ISO 8601标准格式,PnYnMnDTnHnMnS 。该P标记的开始,而T分离从小时-分-秒,年,月,日。所以P3D是三天,P3DT12H是三年半的时间。
罗勒·布尔克

2
Joda时间库将为您的项目添加4744个方法。如果要避免65K方法限制,请明智地选择。
Lior Iluz 2015年

这需要更改为DateTimeFormatter formatter = DateTimeFormat.forPattern(“ yyyy-MM-dd”)
sb_269 2016年

0
        Date userDob = new SimpleDateFormat("yyyy-MM-dd").parse(dob);
        Date today = new Date();
        long diff =  today.getTime() - userDob.getTime();
        int numOfDays = (int) (diff / (1000 * 60 * 60 * 24));
        int hours = (int) (diff / (1000 * 60 * 60));
        int minutes = (int) (diff / (1000 * 60));
        int seconds = (int) (diff / (1000));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.