当前位置: 首页 > 知识库问答 >
问题:

Android系统——从上一个日期开始计算天数、月数和年数

百里飞捷
2023-03-14

如何在Android中获取和显示日期以来的天数,月份和年份?

例如,假设上一个日期是:

02/02/2017

今天的日期是:

04/30/2018

我希望它能这样说:

1 year, 2 months, 28 days

我想我需要得到这样的总天数:

long msDiff = Calendar.getInstance().getTimeInMillis() - oldCalendarDate.getTimeInMillis();
long daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff);

但是我如何将天数转换为年、月和天呢?请记住,并不是所有的月都有31天。

因为这样我只会

452 days

结果呢。但我希望它更像是1年2个月28天。

有更好的解决方案吗?

我也想得到像这样的旧日期在一个变量:

val oldCalendarDate = GregorianCalendar(2017, 3, 30).time

但是上面的代码根本不起作用。是的,我知道变量在kotlin中,因为我在kotlin中工作,所以请原谅语法。我认为更重要的问题是整数的格式。我已经将其他java代码转换为kotlin,但我在这篇文章中将其作为java发布,因为更多的人熟悉java。

共有2个答案

方焱
2023-03-14

你试试这个密码,

 long different = your today date - your previous date;
     // take both dates in date format.

        long secondsInMilli = 1000;
        long minutesInMilli = secondsInMilli * 60;
        long hoursInMilli = minutesInMilli * 60;
        long daysInMilli = hoursInMilli * 24;
        long mothsInMilli = daysInMilli * 30;
        long yearInMilli = mothsInMilli * 12;

        long elapsedYear = different / yearInMilli;
        different = different % yearInMilli;
        long diffYear = elapsedYear;
        Log.d("", "difference of years : " + diffYear);

        long elapsedMonths = different / mothsInMilli;
        different = different % mothsInMilli;
        long diffMonth = elapsedMonths;
        Log.d("", "difference of Months : " + diffMonth);

        long elapsedDays = different / daysInMilli;
        different = different % daysInMilli;
        long diffDays = elapsedDays;
        Log.d("", "difference of Days : " + diffDays);

使用这个代码,我得到了适当的区别,它可能也会帮助你。在下面的节目中,我有两次约会:

过去日期:Mon Mar 26 13:06:52 GMT 05:30 2018

今天e::Mon Apr30 13:06:52GMT 05:30 2018

而我得到的月份差异如下:-

    difference of Years : 0
    difference of Months : 1
    difference of Days : 4
桓瀚
2023-03-14

Calendar对象可以解决此问题

val msDiff = Calendar.getInstance().timeInMillis - oldCalendarDate.timeInMillis;
val calDiff = Calendar.getInstance()
calDiff.timeInMillis = msDiff
val msg = "${calDiff.get(Calendar.YEAR) - 1970} year, ${calDiff.get(Calendar.MONTH)} months, $calDiff.get(Calendar.DAY_OF_MONTH)} days"
 类似资料:
  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 问题内容: 使用date(1970年1月1日)作为时间操纵的默认标准有什么原因吗?我已经在Java和Python中看到了这个标准。我知道这两种语言。还有其他遵循相同标准的流行语言吗? 请描述。 问题答案: 这是Unix时间的标准。 Unix时间或POSIX时间是一种用于描述时间点的系统,时间点定义为自1970年1月1日午夜多点协调世界时(UTC)起经过的秒数,不包括leap秒。

  • 我需要一个可配置的格式作为输出。 我将永远只获得从“01”到“31”的日期字符串 我将永远只获得从“1000”到“9999”的年份字符串 我将永远只获得从“01”到“12”的月份字符串(永远不获得一月、二月等) 我知道SimpleDateFormat(format)可以在一定程度上起作用。 类似于:

  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时

  • 我写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别为2017年2月3日和2017年3月3日时,显示的天数为29天。虽然当他们在同一天,它是显示1。(一个人休假的天数。因此,如果一个人休假一天,他必须选择相同的开始和结束日期。因此,在这种情况下,他休假两天)。 我做错了什么?谢谢你抽出时间。 注意:请不要使用日期构造函数。检查下面被接受的答案。使用simpledateformat或Jo

  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个