Какой самый простой правильный способ получить «предыдущий день в 15:00» во время йода

1

Скажем, у меня есть ссылка DateTime, и я хочу получить время предыдущего дня в 15:00. Если я говорю

DateTime someTime = ....;
DateTime yesterday1500 = someTime.toDateMidnight().toDateTime().minusDays(1).plusHours(15);

Затем это будет работать в течение всех дней, кроме случаев, когда происходит смена летнего времени.
Если someTime = '1.4.2014', я бы получил '31.3.2014 15:00 '.
Если someTime = '31.3.2014 ', я получаю '30.3.2014 16:00'.

Лучшее, что я мог придумать, это

yesterday1500 = new DateTime(someTime.getYear(), someTime.getMonthOfYear(), someTime.getDayOfMonth(), 15, 0, 0, 0);

Он отлично работает, но кажется неуклюжим. Есть ли способ лучше?

Изменение: Я в Хорватии, которая является часовым поясом CEST (UTC + 01: 00).

Edit 2: Добавлено... toDateMidnight(). ToDateTime()... в пример кода, чтобы указать, что someTime может быть в любой момент времени

Теги:
datetime
time
jodatime

2 ответа

6
Лучший ответ

Это довольно аккуратно:

DateTime dt = someTime.minusDays(1).withTime(15, 0, 0, 0);
  • 0
    Как раз то, что я хотел. Спасибо.
-2

@dcarapic, я пробовал несколько версий Joda, не нашел вашей проблемы.

Просто используйте свой код, например:

DateTime вчера1500 = someTime.minusDays(1).plusHours(15);

Результат похож на нижеследующий, я также проверил два момента экономии времени, ваш случай также не возникает.

2014-01-04T00: 00: 00.000 + 08: 00 | 2014-01-03T15: 00: 00,000 + 08: 00

2014-03-31T00: 00: 00.000 + 08: 00 | 2014-03-30T15: 00: 00,000 + 08: 00

2014-09-26T00: 00: 00.000 + 08: 00 | 2014-09-25T15: 00: 00,000 + 08: 00

2014-09-28T00: 00: 00.000 + 08: 00 | 2014-09-27T15: 00: 00,000 + 08: 00

И, между прочим, withTime и plusHour оба вызывали withMillis, чтобы установить новый час. Я не вижу разницы. Я проверил joda 2.4/1.6. Итак, какую версию вы используете?

  • 1
    -1 Этот код никак не работает. Удаление дня и добавление 15 часов не приведет к 15:00 предыдущего дня.
  • 0
    Я использую Joda Time 1.5.2. Примечание. Мне не разрешено обновляться до более новой версии. Я могу воспроизвести проблему с моим часовым поясом (+01: 00). Возможно, что летнее время меняется в разное время в вашем часовом поясе. В моем часовом поясе он меняется в 02:00.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню