Календарь дает неправильную метку времени при добавлении одного дня - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь добавить один день к календарной дате, но получаю неправильный вывод.Ниже код, который я использую.

var cal2= Calendar.getInstance()
cal2!!.timeInMillis=cal.timeInMillis
Log.e("Time1",""+cal.timeInMillis);
cal2.add(Calendar.DATE, 1)
Log.e("Time2",""+cal2.timeInMillis);

Время 1: 1526478465 (среда, 16 мая 2018 г. 19:17:45)

Время 1: 1612878465 (вторник, 9 февраля 2021 г. 19:17:45)

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы как-то путаете секунд и миллисекунд со времен.1 526 478 465 секунд.Если вы рассматриваете их как миллисекунды, вы получите 18 января 1970 года 16:01:18 UTC.Если вы добавите к этому 1 день, вы получите следующее значение, которое вы упомянули (я получил 1 612 878 000, это близко).Когда вы, в свою очередь, интерпретируете 1 612 878 465 секунд, вы получаете 9 февраля 2021 13:47:45 UTC.Это то же самое, что и дата, которую вы упоминаете, во вторник, 9 февраля 2021 г. 19:17:45, если я предполагаю, что вы находитесь по смещению +05: 30 (например, часовой пояс Азии / Калькутты или Азии / Коломбо).

Поскольку в секунду есть 1000 миллисекунд, из-за вашей путаницы вы добавляете 1000 дней к вашей дате вместо 1 дня.

Совет: 10-значные значения обычно представляют собой секунды.13-значные значения обычно составляют миллисекунды.

0 голосов
/ 24 мая 2018

Предполагая, что ваш cal.timeInMillis имеет правильное значение (скажем, сегодняшнюю дату), ваш код работает нормально:

var cal = Calendar.getInstance() <-- Assumption
var cal2 = Calendar.getInstance()
cal2!!.timeInMillis=cal.timeInMillis
println("Time1: "+cal.timeInMillis);
cal2.add(Calendar.DATE, 1)
println("Time2: "+cal2.timeInMillis); 

Запуск вышеуказанного кода дает следующий вывод:

Time1: 1527159971747 (Thursday, May 24, 2018 11:06:11.747 AM)
Time2: 1527246371747 (Friday, May 25, 2018 11:06:11.747 AM)
...