Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a0837fb authored by Neil Fuller's avatar Neil Fuller
Browse files

Fix Y2038 issue in DateUtils.isToday()

Before this change isToday() would stop working in Y2038
because android.text.format.Time doesn't work after Y2038.

This commit fixes the code by using java.time classes that
are Y2038 safe.

Bug: 16550209
Test: atest android.text.format.cts.DateUtilsTest
Change-Id: Ied339a694819c308add8645c7434b645dc1ccdde
parent 3628bb3a
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@ import libcore.icu.LocaleData;
import libcore.icu.RelativeDateTimeFormatter;

import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
@@ -502,17 +505,21 @@ public class DateUtils
     * @return true if the supplied when is today else false
     */
    public static boolean isToday(long when) {
        Time time = new Time();
        time.set(when);
        return isSameDate(when, System.currentTimeMillis());
    }

    private static boolean isSameDate(long oneMillis, long twoMillis) {
        ZoneId zoneId = ZoneId.systemDefault();

        Instant oneInstant = Instant.ofEpochMilli(oneMillis);
        LocalDateTime oneLocalDateTime = LocalDateTime.ofInstant(oneInstant, zoneId);

        int thenYear = time.year;
        int thenMonth = time.month;
        int thenMonthDay = time.monthDay;
        Instant twoInstant = Instant.ofEpochMilli(twoMillis);
        LocalDateTime twoLocalDateTime = LocalDateTime.ofInstant(twoInstant, zoneId);

        time.set(System.currentTimeMillis());
        return (thenYear == time.year)
                && (thenMonth == time.month)
                && (thenMonthDay == time.monthDay);
        return (oneLocalDateTime.getYear() == twoLocalDateTime.getYear())
                && (oneLocalDateTime.getMonthValue() == twoLocalDateTime.getMonthValue())
                && (oneLocalDateTime.getDayOfMonth() == twoLocalDateTime.getDayOfMonth());
    }

    /**