Я хочу получить день сегодня или вчера на основе времени в миллисекундах - PullRequest
0 голосов
/ 06 октября 2018

Я должен вернуть строку сегодня и вчера.Миллисекунды, которые я получил от функции, так что мне делать?Я много пробовал.

    if((data.getStartTimeMilli()-86400000) < data.getStartTimeMilli())
    {
        return "Today";
    }
    else 
    {
        return "Yesterday";
    }

Но вернется только сегодня.Два миллисекундных значения, которые я передаю в функции, одно - startdatemili и enddatemili.Это диапазон дат.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Множество способов выяснить это.

Использование простого Java API:

Calendar c = Calendar.getInstance();
 c.set(Calendar.HOUR_OF_DAY, 0);
 c.set(Calendar.MINUTE, 0);
 c.set(Calendar.SECOND, 0);
 c.set(Calendar.MILLISECOND, 0);
 // Assuming we are expecting milliseconds from today or yesterday only.
 if(( System.currentTimeMillis() - c.getTimeInMillis()) > 0 )
        {
            return "Today";
        }
        else 
        {
            return "Yesterday";
        }
0 голосов
/ 06 октября 2018

Как отмечается в комментарии, обычно today не означает 24 часа назад.

Предположим, что сейчас 2018-10-06 15:20, 2018-10-06 00:01 следует рассматривать как today, а 2018-10-05 23:59 - yesterday, хотя они оба находятся в пределах 24 часов.


Это решение работает в предположении выше.

Получите стартовый миллис сегодня:

ZonedDateTime zonedDateTime = ZonedDateTime.now();
zonedDateTime = zonedDateTime.truncatedTo(ChronoUnit.DAYS);

long millis = zonedDateTime.toInstant().toEpochMilli();

, затем сравните с ним:

if((data.getStartTimeMilli() > millis) {
    return "Today";
} else
    return "Yesterday";
}

Но будьте осторожны, когда стартовый милли раньше, чем today,не означает, что это yesterday, это может быть на день раньше.


Если вы хотите использовать 24 hours для ограничения сегодня:

Instant instant = Instant.now().minusMillis(86400000);
long millis = instant.toEpochMilli();
...