Как узнать дату первой среды месяца java календарь - PullRequest
3 голосов
/ 24 марта 2012

Как бы я получить дату следующей первой среды месяца, используя класс календаря Java. Например:

Today(24/03/2012) the next first Wednesday will be 04/04/2012
On(05/04/2012) the next first Wednesday will be 02/05/2012

спасибо.

Ответы [ 6 ]

3 голосов
/ 06 декабря 2016

В Java 8 и более поздних версиях мы можем использовать классы java.time , включая LocalDate и TemporalAdjusters, а также DayOfWeek перечислениеСм. Учебное пособие .

LocalDate firstSundayOfNextMonth = LocalDate
              .now()
              .with( TemporalAdjusters.firstDayOfNextMonth() )
              .with( TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY) );
3 голосов
/ 24 марта 2012

Это работает

  • установить дату начала
  • перейти к следующему месяцу
  • перейти на первый день месяца
  • добавить дни, пока мы не доберемся до среды

Код

import static java.util.Calendar.*;

public static void main(String[] args) {
    System.out.println(getNextMonthFirstWed(new Date(112, 3 - 1, 24)));
    System.out.println(getNextMonthFirstWed(new Date(112, 4 - 1, 05)));
}

private static Date getNextMonthFirstWed(Date date) {
    Calendar c = getInstance();
    c.setTime(date);
    c.add(MONTH, 1);
    c.set(DAY_OF_MONTH, 1);

    // search until wednesday
    while (c.get(DAY_OF_WEEK) != WEDNESDAY) {
        c.add(DAY_OF_MONTH, 1);
    }
    return c.getTime();
}
2 голосов
/ 27 сентября 2016

Этот код ответит на ваш вопрос, предоставляя немного больше функциональности.Используя это, вы можете указать конкретный день недели, и он вернет первое вхождение указанного дня недели в следующем месяце.Это также позволяет избежать циклического просмотра и проверки каждый день, пока вы не найдете правильный.Я преобразовал это из некоторого отличного кода, с которым я в настоящее время работаю.Надеюсь, это поможет!

private static Date getNextMonthFirstWeekDayOccurence(Date date, int weekDay) {
            //Get Calendar and move it to the first day of the next month
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);
            calendar.set(Calendar.DAY_OF_MONTH, 1);

            //Calculate the difference between the days of the week
            int dayDifference = calendar.get(Calendar.DAY_OF_WEEK) - weekDay;

            if (dayDifference < 0) { //Implies (calendar.get(Calendar.DAY_OF_WEEK) < weekDay)
                calendar.add(Calendar.DAY_OF_MONTH, Math.abs(dayDifference));
            } else if (dayDifference > 0) { //Implies (calendar.get(Calendar.DAY_OF_WEEK) > weekDay)
                def daysToAdd = calendar.get(Calendar.DAY_OF_WEEK) - dayDifference;
                calendar.add(Calendar.DAY_OF_MONTH, daysToAdd);
            }
            return calendar.getTime();
    }
2 голосов
/ 24 марта 2012

Может быть, этот код вам нужен:

    Calendar calendar = Calendar.getInstance();
    while (calendar.get(Calendar.DAY_OF_MONTH) > 7 ||
            calendar.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) {
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    }
    SimpleDateFormat gm = new SimpleDateFormat("MMM yyyy dd");
    System.out.println(gm.format(new Date(calendar.getTimeInMillis())));

Вывод на сегодня: Apr 2012 04. Для Apr 2012 04 выход составляет Apr 2012 04. Для Apr 2012 05 вывод составляет May 2012 02.

0 голосов
/ 16 апреля 2014
public boolean firstWednesdayOfTheMonth() {
        // gets todays date
        Calendar calendar = Calendar.getInstance();
        // get the date
        int date = calendar.get(Calendar.DAY_OF_MONTH);
        // get the day of the week SUNDAY == 1, MONDAY == 2 ....
        int day =   calendar.get(Calendar.DAY_OF_WEEK); 
        // this checks if its a wednesday and the date falls within 8 then it should be the first wednesday
        if (date < 8 &&  day == 4) {
                return true;
        }

            return false;   
    }
0 голосов
/ 24 марта 2012

Или Joda версия:

private static DateTime nextFirstWednesday(DateTime dateTime) {
    while (dateTime.getDayOfMonth() > 7 || dateTime.getDayOfWeek() != DateTimeConstants.WEDNESDAY) {
        dateTime = dateTime.plusDays(1);
    }
    return dateTime;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...