En Java, cómo obtener cadenas de días de la semana (Sun, Mon, …, Sat) con el sistema de configuración por defecto (idioma)

La forma más sencilla:

String[] namesOfDays = new String[7] { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; 

Este método no utiliza la configuración regional. Por lo tanto, si el idioma del sistema no es el inglés, este método no funciona correctamente.

Usando el tiempo de Joda, podemos hacer esto:

 String[] namesOfDays = new String[7]; LocalDate now = new LocalDate(); for (int i=0; i<7; i++) { /* DateTimeConstants.MONDAY = 1, TUESDAY = 2, ..., SUNDAY = 7 */ namesOfDays[i] = now.withDayOfWeek((DateTimeConstants.SUNDAY + i - 1) % 7 + 1) .dayOfWeek().getAsShortText(); } 

Sin embargo, este método utiliza la fecha de hoy y los cálculos de calendario, que son inútiles para el propósito final. Además, es un poco complicado.

¿Hay una manera fácil de obtener cadenas como Sun, Mon, …, Sat con la configuración predeterminada del sistema?

Si no te he entendido mal

  calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US); 

Es lo que usted está buscando. Aquí puede encontrar la documentación,

O también puedes usar, getShortWeekdays ()

 String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays() 
 Date now = new Date(); // EEE gives short day names, EEEE would be full length. SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US); String asWeek = dateFormat.format(now); 

Puede crear la fecha con la fecha y la hora deseadas. Y lograr lo que quieres.

Tl dr

 DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.getDefault() ) 

Java.time

El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a las clases java.time . Gran parte de java.time está retro-portado a Android (ver más abajo).

DayOfWeek

El enum de DayOfWeek define siete objetos, uno para cada día de la semana. La clase ofrece varios métodos útiles incluyendo getDisplayName para generar una cadena con nombre de día localizado.

Para localizar, especifique:

  • TextStyle para determinar cuánto tiempo o abreviado debe ser la cadena.
  • Locale para determinar (a) el lenguaje humano para la traducción del nombre del día, nombre del mes, y tal, y (b) las normas culturales que deciden las cuestiones de la abreviatura, la capitalización, la puntuación, los separadores, etc.

Ejemplo:

 String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.CANADA_FRENCH ); 

Puede utilizar la zona horaria predeterminada actual de JVM en lugar de especificar una. Pero tenga en cuenta el riesgo: La zona predeterminada se puede cambiar en cualquier momento durante la ejecución por cualquier código en cualquier subproceso de cualquier aplicación que se ejecuta dentro de la JVM.

 Locale locale = Locale.getDefault() ; String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , locale ); 

Acerca de java.time

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

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

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

Dónde obtener las clases java.time?

  • Java SE 8 y SE 9 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de java.time se retroporta a Java 6 & 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta específicamente a ThreeTen-Backport (mencionado anteriormente) para Android.
    • Consulte Cómo utilizar ThreeTenABP ….

Por favor, intente esto

 public static String[] namesOfDays = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); System.out.println("Day := "+namesOfDays[day-1]); 
  • Sólo algunos usuarios informan del error "Recurso no encontrado". ¿Esto tiene sentido?
  • Separar horas de minutos en un valor de tiempo dado
  • Convertir milisegundo a Joda Fecha Hora o para zona 0000
  • Cómo obtener el formato de fecha de configuración regional en mes y día
  • ¿Cómo manejar las diferencias de la base de datos de horarios de JodaTime y Android?
  • Encuentre el día y la hora restante usando jodatime
  • Adición de Joda Time a Android Studio
  • Gradle duplicar archivos durante el embalaje - messages.properties de JodaTime
  • Un ligero retraso al hacer clic en un botón
  • Anular el primer día de la semana en joda?
  • Hora de Joda y error de ProGuard al exportar .apk
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.