En Java, cómo obtener cadenas de días de la semana(domingo, lunes,..., sábado) con la configuración regional predeterminada(idioma)
android calendar (5)
La forma más sencilla:
String[] namesOfDays = new String[7] {
"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"
};
Este método no utiliza Locale. 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 los cálculos de fecha y calendario de hoy, 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 regional predeterminada del sistema?
tl; dr
DayOfWeek.MONDAY.getDisplayName(
TextStyle.SHORT ,
Locale.getDefault()
)
java.time
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time . Gran parte de java.time está respaldado a Android (ver más abajo).
DayOfWeek
La enumeración de DayOfWeek
define siete objetos, uno para cada día de la semana. La clase ofrece varios métodos prácticos que incluyen getDisplayName
para generar una cadena con el nombre del 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, el nombre del mes y tal, y (b) las normas culturales que deciden los problemas de abreviatura, uso de mayúsculas, puntuación, separadores y demás.
Ejemplo:
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.CANADA_FRENCH );
Puede utilizar la zona horaria predeterminada actual de la 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 mediante cualquier código en cualquier subproceso de cualquier aplicación que se ejecute dentro de la JVM.
Locale locale = Locale.getDefault() ;
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , locale );
Acerca de java.time
El marco java.time está integrado en Java 8 y java.time posteriores. Estas clases sustituyen a las antiguas y problemáticas clases de fecha y hora como java.util.Date
, Calendar
y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busca 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 posteriores
- Incorporado.
- Parte de la API de Java estándar con una implementación en paquete.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de java.time está respaldada a Java 6 y 7 en ThreeTen-Backport .
- Android
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Vea Cómo usar ThreeTenABP… .
Por favor prueba 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]);
Si no te he entendido mal
calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);
es lo que buscas. Here podéis encontrar la documentación,
O también puedes usar, getShortWeekdays()
String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()
Sin 1.8, puedes usar DateFormatSymbols
(que también funciona con Android).
DateFormatSymbols.getWeekdays()
Devoluciones: las cadenas del día de la semana. Use Calendar.SUNDAY, Calendar.MONDAY, etc. para indexar la matriz de resultados.
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 que desee. Y consigue lo que quieras.