Android - получить дни, месяцы и годы с предыдущей даты - PullRequest
0 голосов
/ 30 апреля 2018

Как в 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 ]

0 голосов
/ 30 апреля 2018

Вы попробуете этот код,

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

Используя этот код, я получил правильную разницу, возможно, он вам тоже поможет. Показать ниже, У меня было две даты :

pastdate :: Mon Mar 26 13:06:52 GMT+05:30 2018

todayDate :: Mon Apr 30 13:06:52 GMT+05:30 2018

Я получил разницу в месяце, году и днях, как показано ниже: -

    difference of Years : 0
    difference of Months : 1
    difference of Days : 4
0 голосов
/ 30 апреля 2018

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...