В Joda-Time установите DateTime на начало месяца

Начиная с Spring Security 4.0, защита CSRF по умолчанию включена с конфигурацией XML. Если вы хотите отключить защиту CSRF, соответствующую конфигурацию XML можно увидеть ниже.


  
  

Защита CSRF по умолчанию включена с конфигурацией Java. Если вы хотите отключить CSRF, соответствующую конфигурацию Java можно увидеть ниже. См. Javadoc of csrf () для дополнительных настроек в настройке защиты CSRF.

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
  http
  .csrf().disable();
}
}
blockquote>

См. Ниже ссылку http://docs.spring.io/spring- безопасность / сайт / документы / 4.0.x / ссылка / htmlsingle / # CSRF-Configure

29
задан Basil Bourque 25 November 2013 в 23:34
поделиться

5 ответов

Полночь в начале первого дня текущего месяца определяется по формуле:

// first midnight in this month
DateMidnight first = new DateMidnight().withDayOfMonth(1);

// last midnight in this month
DateMidnight last = first.plusMonths(1).minusDays(1);

При запуске с java.util.Date используется другой конструктор DateMidnight:

// first midnight in java.util.Date's month
DateMidnight first = new DateMidnight( date ).withDayOfMonth(1);

Joda Time java doc - https://www.joda.org/joda-time/apidocs/overview-summary.html

43
ответ дан JodaStephen 25 November 2013 в 23:34
поделиться

Альтернативный способ (без учета DateMidnight) для получения первого дня месяца будет использовать:

31
ответ дан ngeek 25 November 2013 в 23:34
поделиться

О, я не видел, чтобы речь шла о йодатиме. Во всяком случае:

Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);

int min = c.getActualMinimum(Calendar.DAY_OF_MONTH);
int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = min; i <= max; i++) {
    c.set(Calendar.DAY_OF_MONTH, i);
    System.out.println(c.getTime());
}

Или используя общий язык:

Date min = DateUtils.truncate(date, Calendar.MONTH);
Date max = DateUtils.addMonths(min, 1);
for (Date cur = min; cur.before(max); cur = DateUtils.addDays(cur, 1)) {
    System.out.println(cur);
}

5
ответ дан Dani 25 November 2013 в 23:34
поделиться

DateMidnight сейчас устарела. Вместо этого вы можете сделать:

LocalDate firstOfMonth = new LocalDate(date).withDayOfMonth(1);
LocalDate lastOfMonth = firstOfMonth.plusMonths(1).minusDays(1);

Если вы знаете часовой пояс, используйте new LocalDate(date, timeZone) вместо этого для большей точности.

Вы также можете сделать .dayOfMonth().withMinimumValue() вместо .withDayOfMonth(1)

РЕДАКТИРОВАТЬ:

Это даст вам 12/1/YYYY 00:00 и 12/31/YYYY 00:00. Если вы предпочитаете, чтобы последний месяц был фактически первым в следующем месяце (поскольку вы выполняете предложение между), то удалите minusDays(1) из вычисления lastOfMonth

0
ответ дан JustinKSU 25 November 2013 в 23:34
поделиться

Первый момент дня

Ответ от 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 из-за перехода на летнее время . 1119]


Как правило, всегда следует указывать часовой пояс, а не полагаться на значение по умолчанию. Опущено здесь для простоты. Нужно добавить такую ​​строку и передать объект часового пояса конструкторам, использованным в примере выше.

// 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.time

Вышеприведенное верно, но устарело. Библиотека 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 );
8
ответ дан JodaStephen 25 November 2013 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: