Obtén el día de la semana en GregorianCalendar

Tengo una cita y necesito saber el día de la semana, así que usé un objeto de GregorianCalendar pero vuelvo algunas fechas que son incorrectas.

GregorianCalendar calendar = new GregorianCalendar(year, month, day); int i = calendar.get(Calendar.DAY_OF_WEEK); 

¿Qué estoy haciendo mal?

¡Gracias!

EDITAR SOLUCIÓN:

 mont--; GregorianCalendar calendar = new GregorianCalendar(year, month, day); int i = calendar.get(Calendar.DAY_OF_WEEK); if(i == 2){ dayOfTheWeek = "Mon"; } else if (i==3){ dayOfTheWeek = "Tue"; } else if (i==4){ dayOfTheWeek = "Wed"; } else if (i==5){ dayOfTheWeek = "Thu"; } else if (i==6){ dayOfTheWeek = "Fri"; } else if (i==7){ dayOfTheWeek = "Sat"; } else if (i==1){ dayOfTheWeek = "Sun"; } 

 TimeZone timezone = TimeZone.getDefault(); Calendar calendar = new GregorianCalendar(timezone); calendar.set(year, month, day, hour, minute, second); String monthName=calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());//Locale.US); String dayName=calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault());//Locale.US); 

Joda-Time

Utilizo la biblioteca Joda-Time para todas las operaciones relacionadas con la fecha / hora. Joda tiene en cuenta localidad y obtiene resultados en consecuencia:

 import org.joda.time.DateTime; DateTime date = new DateTime(year, month, day, 0, 0, 0); 

o

 DateTime date = DateTime().now(); 

Día de la semana (int):

 date.getDayOfWeek(); 

Día de la semana (cadena corta) usando las opciones toString() y DateTimeFormat :

 date.toString("EE"); 

Tl dr

 myGregCal.toZonedDateTime().getDayOfWeek().getDisplayName( TextStyle.SHORT , Locale.US ) 

Java.time

Convierta el problemático antiguo legado java.util.GregorianCalendar a un objeto moderno java.time llamando a nuevos métodos agregados a la antigua clase.

 ZonedDateTime zdt = myGregCal.toZonedDateTime(); 

Obtener el objeto enum DayOfWeek para ese momento en esa zona horaria.

 DayOfWeek dow = zdt.getDayOfWeek(); 

Pase estos objetos DayOfWeek alrededor de su código en lugar de pasar números enteros como 1-7 o cadenas como "MON". Mediante el uso de los objetos enum que hacer su código más auto-documentación, proporcionar seguridad de tipo y garantizar una gama de valores válidos.

Para la presentación al usuario, pida al objeto DayOfWeek que traduzca el nombre del día de la semana a un idioma humano definido en una Locale .

 String output = dow.getDisplayName( TextStyle.FULL_STANDALONE , Locale.CANADA_FRENCH ); 

Acerca de java.time

El framework java.time está integrado en Java 8 y posterior. Estas clases suplantan las viejas clases problemáticas de fecha y hora, como java.util.Date , .Calendar , y java.text.SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a java.time.

Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones.

Gran parte de la funcionalidad de java.time se retroporta a Java 6 y 7 en ThreeTen-Backport y se adapta más a Android en ThreeTenABP .

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un terreno probatorio para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles como Interval , YearWeek , YearQuarter y más.

  • Cómo restar dos objetos de calendario en Android
  • Utilizar Calendario en el emulador Android 4.0 +
  • Cómo mostrar sólo el mes actual en la vista de calendario de Android
  • La adición de un día a un calendario en Android falla el 31
  • Java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo
  • Barra de herramientas con calendario
  • Calendario android
  • Ayuda de CalendarView para Android
  • Cómo configurar un recordatorio en Android?
  • Cambio de color de un solo día en calendarview, android
  • Cómo mostrar el lunes como primer día CalendarView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.