Come ottenere il nome del primo giorno del mese?

Come potrei fare per ottenere il primo giorno del mese? Quindi per gennaio, quest’anno, sarebbe tornato domenica. E poi per febbraio sarebbe tornato mercoledì.

È ansible creare un Calendar con qualsiasi data desiderata e quindi set(Calendar.DAY_OF_MONTH, 1) per ottenere il primo giorno del mese.

  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)); 
 public int getFirstDay(){ Calendar c=new GregorianCalendar(); c.set(Calendar.DAY_OF_MONTH, 1); return c.get(Calendar.DAY_OF_WEEK); } 

Da lì puoi vedere se int è uguale a Calendar.SUNDAY, Calendar.MONDAY, ecc.

Creare l’object java.util.Date o java.util.Calendar , impostare il valore della data e utilizzare il metodo della class java.text.SimpleDateFormat per formattarlo.

  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())); 

In Java 8 puoi usare i TemporalAdjusters:

Questo è un esempio:

 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()); } } 

I risultati sarebbero:

 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 

java.time

Da Java 8 possiamo anche utilizzare la class YearMonth che ci consente di creare oggetti LocalDate con giorni specifici (primo, ultimo). Quindi possiamo semplicemente convertire queste date in DayOfWeek Enum ( Tutorial ) e leggere il suo name proprietà.

 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); 

risultato:

 SUNDAY TUESDAY 

java.time, con codice soft

La risposta di Pshemo era buona e intelligente, ma è codificata in inglese. Prendiamo una pugnalata che consente la localizzazione.

 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

Genera una rappresentazione testuale di quel LocalDate . Specifichiamo le CANADA_FRENCH Locale desiderate, in questo caso CANADA_FRENCH . Se omesso, le impostazioni internazionali correnti della JVM vengono applicate implicitamente; meglio specificare le impostazioni internazionali esplicite.

 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 ); 

Scarica alla console.

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

Quando corri

samedi

DayOfWeek Enum

Un altro modo è utilizzare l’ DayOfWeek DayOfWeek. Questa getDisplayName include un metodo getDisplayName cui si specifica sia lo stile del testo (nome completo in funzione dell’abbreviazione) sia un locale.

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