¿Hay un formato de fecha para mostrar el día de la semana en Java?

128

Sé de formatos de fecha como
"yyyy-mm-dd"-que muestra la fecha en formato 2011-02-26
"yyyy-MMM-dd"-que muestra la fecha en formato2011-FEB-26

para ser utilizado en, por ejemplo:

SimpleDateFormat formatter = new SimpleDateFormat(
                "yyyy/MMM/dd ");

Quiero un formato que me ayude a mostrar el día de la semana como 2011-02-MONo cualquier cosa. Solo quiero que el día de la semana se muestre en caracteres con el mes y el año. ¿Me puede hablar de un formato como este?

Rogerstone
fuente
1
¿Qué tal simplemente usar ddcomo formato?
Johan Sjöberg
3
Estoy seguro de que los documentos de la API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ) estarán encantados de proporcionarle una respuesta.
M. Jessup
1
¿Qué quiere decir "día"? día de la semana, día del mes. En su ejemplo, se muestra la fecha completa. Muestre la entrada y salida exacta que desea.
Bozho
2
En general, utilice mejor la -notación solo con fechas en formato ISO (es decir, año-mes-día). El guión fue elegido allí ya que no se utiliza para cualquier otro formato de fecha en el momento, para evitar confusiones, y ahora todo el mundo está usando su orden personalizado con el guión ...
Paulo Ebermann

Respuestas:

322

Esto debería mostrar 'Tue':

new SimpleDateFormat("EEE").format(new Date());

Esto debería mostrar 'martes':

new SimpleDateFormat("EEEE").format(new Date());

Esto debería mostrar 'T':

new SimpleDateFormat("EEEEE").format(new Date());

Entonces su ejemplo específico sería:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());
Nathan Feger
fuente
55
Hermosa solución! Lo que estaba buscando era: lunes, 04/04/2016. Entonces, en mi caso, new SimpleDateFormat("EEEE, dd/MM/yyyy");si ayuda a alguien en el futuro.
AuroMetal
1
OK, funciona EEEEmuestra nombres completos del día de la semana, es decir, 'lunes', 'martes', etc.
kosiara - Bartosz Kosarzycki
Realmente no había considerado que este sitio incluso estaría presente, y mucho menos Java finalmente lograría rescatar a Date. Técnicamente responde la pregunta de los OP. Sin embargo, probablemente pueda agregar una nueva sección sobre cómo funciona el nuevo contenido de java.time
Nathan Feger el
18

Sí, 'E' hace el truco

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-E");
System.out.println(df.format(date));
kit de herramientas
fuente
55
Ver oráculo en la url de los javadocs todavía se siente extraño.
Nathan Feger
También usamos: DateFormat df = new SimpleDateFormat("yyyy-MM-EEEEEEE");para mostrar largas DayOfWeek.
Do Nhu Vy
4
SimpleDateFormat sdf=new SimpleDateFormat("EEE");

EEE significa día de la semana, por ejemplo, el jueves se muestra como jue.

usuario2824143
fuente
3

tl; dr

LocalDate.of( 2018 , Month.JANUARY , 23 )
         .format( DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US )  )

java.time

El enfoque moderno utiliza las clases java.time.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;

Observe cómo especificamos un Localeejemplo Locale.CANADA_FRENCHpara determinar el lenguaje humano utilizado para traducir el nombre del día.

DateTimeFormatter f = DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US ) ;
String output = ld.format( f ) ;

ISO 8601

Por cierto, usted puede estar interesado en la norma de la semana ISO 8601 esquema de numeración: yyyy-Www-d.

2018-W01-2

La semana 1 tiene el primer jueves del año calendario. La semana comienza un lunes. Un año tiene 52 o 53 semanas. Los últimos / primeros días de un año calendario pueden aterrizar en el año semanal siguiente / anterior.

El dígito único al final es el día de la semana, 1-7 de lunes a domingo.

Agregue la clase de biblioteca ThreeTen-Extra a su proyecto para la YearWeekclase.


Sobre java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados 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 busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases java.time?

  • Java SE 8 , Java SE 9 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características menores y correcciones.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • Versiones posteriores de las implementaciones de paquetes de Android de las clases java.time.
    • Para principios de Android, el ThreeTenABP proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo utilizar ThreeTenABP ... .

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más .

Albahaca Bourque
fuente
2

Sé que la pregunta es acerca de cómo obtener el día de la semana como una cadena (por ejemplo, el nombre corto), pero para cualquiera que esté buscando el día numérico de la semana (como yo), puede usar la nueva cadena de formato "u", compatible desde Java 7. Por ejemplo:

new SimpleDateFormat("u").format(new Date());

devuelve el índice del día de la semana de hoy, a saber: 1 = lunes, 2 = martes, ..., 7 = domingo.

Sal Borrelli
fuente