java - novilunio - luna nueva visible
¿Cómo obtener el nombre del primer día de un mes? (8)
java.time
Desde Java 8 también podemos usar la clase YearMonth que nos permite crear objetos LocalDate con días específicos (primero, último). Luego, podemos simplemente convertir estas fechas a DayOfWeek Enum ( Tutorial ) y leer su propiedad de 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);
resultado:
SUNDAY
TUESDAY
¿Cómo haría para obtener el primer día del mes? Así que para enero, de este año, volvería el domingo. Y luego para febrero volvería el miércoles.
java.time, codificado suave
La Answer de Pshemo fue buena e inteligente, pero está codificada al inglés. Vamos a echarle un vistazo para permitir la localización.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Time zone is crucial to determining a date.
YearMonth yearMonth = YearMonth.now( zoneId );
LocalDate firstOfMonth = yearMonth.atDay( 1 );
Formateador
Generar una representación textual de ese LocalDate . Especificamos la CANADA_FRENCH Locale deseada, en este caso CANADA_FRENCH . Si se omite, la configuración regional predeterminada actual de su JVM se aplica implícitamente; Mejor especificar locale explícito.
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 );
Volcar a la consola.
System.out.println( "output: " + output );
Cuando se ejecuta
samedi
DayOfWeek Enum
Otra ruta es utilizar la enumeración DayOfWeek . Esta enumeración incluye un método getDisplayName donde se especifica el estilo de texto (nombre completo versus abreviatura) y una Locale .
DayOfWeek dayOfWeek = firstOfMonth.getDayOfWeek() ;
String output = dayOfWeek.getDisplayName( TextStyle.FULL_STANDALONE , Locale.CANADA_FRENCH ) ;
TemporalAdjuster
En java 8 puede usar la nueva LocalDate y LocalTime API.
Para lograr el codiciado resultado, intente lo siguiente. Imprime el nombre del día dado.
import java.time.*;
import java.time.temporal.*;
public class Main {
public static void main(String[] args) {
LocalDate l = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
System.out.println(l.getDayOfWeek());
}
}
Explicación:
-
nowte da la fecha actual. - Al llamar
withusted puede pasar unTemporalAdjusterque es una herramienta clave para modificar objetos temporales. -
getDayOfWeekObtiene el campo del día de la semana, que es una enumeraciónDayOfWeek. Esto incluye nombres textuales de los valores.
TemporalAdjuster tiene una clase hermana, llamada TemporalAdjusters que contiene métodos estáticos con respecto a los ajustes, como el que está buscando, el firstDayOfMonth día de firstDayOfMonth
Cree el objeto java.util.Date o java.util.Calendar , establezca el valor de la fecha y use el método de clase java.text.SimpleDateFormat para formatearlo.
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()));
En el Java 8 puedes usar los Ajustadores Temporales:
Esto es un ejemplo:
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());
}
}
Los resultados serían:
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
Puede crear un Calendar con la fecha que desee y luego set(Calendar.DAY_OF_MONTH, 1) para obtener el primer día de un mes.
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));
Para obtener la primera fecha del mes actual, use java.util.Calendar . Primero obtenga una instancia del mismo y configure el campo Calendar.DAY_OF_MONTH en la primera fecha del mes. Como el primer día de cualquier mes es 1, en lugar de cal.getActualMinimum(Calendar.DAY_OF_MONTH) , se puede usar 1 aquí.
private Date getFirstDateOfCurrentMonth() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTime();
}
public int getFirstDay(){
Calendar c=new GregorianCalendar();
c.set(Calendar.DAY_OF_MONTH, 1);
return c.get(Calendar.DAY_OF_WEEK);
}
Desde allí puede ver si el int es igual a Calendar.SUNDAY, Calendar.MONDAY, etc.