первый момент дня
ответ ngeek верен, но не может указать время в первый момент дня. Чтобы настроить время, добавьте вызов withTimeAtStartOfDay
.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
org.joda.time.DateTime startOfThisMonth = new org.joda.time.DateTime().dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
org.joda.time.DateTime startofNextMonth = startOfThisMonth.plusMonths( 1 ).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();
System.out.println( "startOfThisMonth: " + startOfThisMonth );
System.out.println( "startofNextMonth: " + startofNextMonth );
Когда бежишь в Сиэтле, США…
startOfThisMonth: 2013-11-01T00:00:00.000-07:00
startofNextMonth: 2013-12-01T00:00:00.000-08:00
Обратите внимание на разницу в этих двух строках вывода консоли: -7 против -8 из-за летнего времени.
Как правило, всегда следует указывать часовой пояс, а не полагаться на значение по умолчанию. Здесь опущено для простоты. Нужно добавить строку, подобную этой, и передать объект часового пояса конструкторам, используемым в примере выше.
// Time Zone list: http://joda-time.sourceforge.net/timezones.html (Possibly out-dated, read note on that page)
// UTC time zone (no offset) has a constant, so no need to construct: org.joda.time.DateTimeZone.UTC
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" );
Java.время
Вышеупомянутое верно, но устарело. Библиотека Joda-Time теперь заменена фреймворком java.time, встроенным в Java 8 и более поздние версии.
LocalDate
представляет значение только для даты без времени суток и без часового пояса. Часовой пояс имеет решающее значение для определения даты. В любой данный момент дата варьируется в зависимости от зоны по всему миру.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
Используйте один из TemporalAdjusters
для получить первое число месяца.
LocalDate firstOfMonth = today.with( TemporalAdjusters.firstDayOfMonth() );
LocalDate
может генерировать ZonedDateTime
, представляющий первый момент дня.
ZonedDateTime firstMomentOfCurrentMonth = firstOfMonth.atStartOfDay( zoneId );
person
Basil Bourque
schedule
25.11.2013