Подтвердить что ты не робот

Как получить имя первого дня месяца?

Как я могу получить первый день месяца? Так что в январе этого года он вернется в воскресенье. А затем в феврале он вернется в среду.

4b9b3361

Ответ 1

Чтобы получить первую дату текущего месяца, используйте java.util.Calendar. Сначала получите экземпляр и установите поле Calendar.DAY_OF_MONTH на первую дату месяца. Поскольку первый день любого месяца равен 1, здесь cal.getActualMinimum(Calendar.DAY_OF_MONTH), здесь можно использовать 1.

private Date getFirstDateOfCurrentMonth() {
  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
  return cal.getTime();
}

Ответ 2

Вы можете создать Calendar с любой нужной датой, а затем сделать set(Calendar.DAY_OF_MONTH, 1), чтобы получить первый день месяца.

     Calendar cal = Calendar.getInstance();
     cal.set(Calendar.DATE, 25);
     cal.set(Calendar.MONTH, Calendar.JANUARY);
     cal.set(Calendar.YEAR, 2012);

     cal.set(Calendar.DAY_OF_MONTH, 1);
     Date firstDayOfMonth = cal.getTime();  

     DateFormat sdf = new SimpleDateFormat("EEEEEEEE");   
     System.out.println("First Day of Month: " + sdf.format(firstDayOfMonth));  

Ответ 3

public int getFirstDay(){
    Calendar c=new GregorianCalendar();
    c.set(Calendar.DAY_OF_MONTH, 1);
    return c.get(Calendar.DAY_OF_WEEK);
}

Оттуда вы можете увидеть, соответствует ли значение int Calendar.SUNDAY, Calendar.MONDAY и т.д.

Ответ 4

Создайте объект java.util.Date или java.util.Calendar, установите значение даты и используйте метод класса java.text.SimpleDateFormat для его форматирования.

 Calendar cal=Calendar.getInstance();
 cal.set(Calendar.DATE,1);
 cal.set(Calendar.MONTH,0);
 cal.set(Calendar.YEAR,2012);

 SimpleDateFormat sdf=new SimpleDateFormat("EEEE");
 System.out.println(sdf.format(cal.getTime()));

Ответ 5

В Java 8 вы можете использовать TemporalAdjusters:

Это пример:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

/**
 * Dates in Java8
 *
 */
public class App {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        System.out.println("Day of Month: " + localDate.getDayOfMonth());
        System.out.println("Month: " + localDate.getMonth());
        System.out.println("Year: " + localDate.getYear());

        System.out.printf("first day of Month: %s%n",
                localDate.with(TemporalAdjusters.firstDayOfMonth()));
        System.out.printf("first Monday of Month: %s%n", localDate
                .with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
        System.out.printf("last day of Month: %s%n",
                localDate.with(TemporalAdjusters.lastDayOfMonth()));
        System.out.printf("first day of next Month: %s%n",
                localDate.with(TemporalAdjusters.firstDayOfNextMonth()));
        System.out.printf("first day of next Year: %s%n",
                localDate.with(TemporalAdjusters.firstDayOfNextYear()));
        System.out.printf("first day of Year: %s%n",
                localDate.with(TemporalAdjusters.firstDayOfYear()));

        LocalDate tomorrow = localDate.plusDays(1);
        System.out.println("Day of Month: " + tomorrow.getDayOfMonth());
        System.out.println("Month: " + tomorrow.getMonth());
        System.out.println("Year: " + tomorrow.getYear());
    }

}

Результаты:

Day of Month: 16
Month: MAY
Year: 2014
first day of Month: 2014-05-01
first Monday of Month: 2014-05-05
last day of Month: 2014-05-31
first day of next Month: 2014-06-01
first day of next Year: 2015-01-01
first day of Year: 2014-01-01
Last in Month Tuesday: 2014-05-27
Day of Month: 17
Month: MAY
Year: 2014

Ответ 6

java.time

Начиная с Java 8 мы также можем использовать класс YearMonth, который позволяет нам создавать LocalDate с указанными днями (первый, последний). Затем мы можем просто преобразовать эти даты в DayOfWeek Enum (Tutorial) и прочитайте его name.

YearMonth ym = YearMonth.of(2012, 1);

String firstDay = ym.atDay(1).getDayOfWeek().name();
String lastDay = ym.atEndOfMonth().getDayOfWeek().name();

System.out.println(firstDay);
System.out.println(lastDay);

результат:

SUNDAY
TUESDAY

Ответ 7

java.time, soft-code

Ответ от Pshemo был хорошим и умным, но жестко привязан к английскому. Позвольте взять удар, чтобы разрешить локализацию.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Time zone is crucial to determining a date.
YearMonth yearMonth = YearMonth.now( zoneId );
LocalDate firstOfMonth = yearMonth.atDay( 1 );

Formatter

Создайте текстовое представление этого LocalDate. Мы указываем желаемый Locale, в этом случае CANADA_FRENCH. Если этот параметр опущен, ваш JVM-стандарт, используемый по умолчанию, неявно применяется; лучше указать явный язык.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "EEEE" ).withZone( zoneId ).withLocale( Locale.CANADA_FRENCH );  // Exactly four 'E' letters means full form. http://docs.oracle.com/javase/8/docs/api/java/time/format/TextStyle.html#FULL
String output = formatter.format( firstOfMonth );

Дамп для консоли.

System.out.println( "output: " + output );

При запуске.

Samedi

DayOfWeek Enum

Другой маршрут - использовать DayOfWeek enum. Это перечисление включает метод getDisplayName, где вы указываете как текст стиль (полное имя и аббревиатура) и Locale.

DayOfWeek dayOfWeek = firstOfMonth.getDayOfWeek() ;
String output = dayOfWeek.getDisplayName( TextStyle.FULL_STANDALONE  , Locale.CANADA_FRENCH ) ;