неправильное время календаря после смены часового пояса

Мне нужно получить дату 5 месяцев назад от текущей с первым днем ​​месяца, я использую для этого этот код:

val date = Calendar.getInstance()
date.add(Calendar.MONTH, -5)
date.set(Calendar.DAY_OF_MONTH, 1)
date.set(Calendar.HOUR_OF_DAY, 0)
date.set(Calendar.MINUTE, 0)
date.set(Calendar.SECOND, 0)

Он нормально работает, делая из 2018-08-10T15:46:53+02:00 необходимых 2018-03-01T00:00:00+01:00

Но если я изменю часовой пояс на GMT+7, возобновлю работу приложения и запущу этот код, это даст мне странный результат за несколько дней до того, как это необходимо: 2018-02-28T20:00:00+01:00.

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


person Max Makeichik    schedule 10.08.2018    source источник


Ответы (1)


Используйте библиотеку JodaTime, тогда ваш код будет выглядеть так:

DateTime now = DateTime.now();
DateTime fiveMonthsAgo= now.minusMonths(5);

В противном случае вы должны вручную вычесть год, когда это необходимо.

person UgAr0FF    schedule 10.08.2018