Android: ¿cómo obtener el día actual de la semana (lunes, etc.) en el idioma del usuario?

80

Quiero saber cuál es el día actual de la semana (lunes, martes ...) en el idioma local del usuario. Por ejemplo, "Lundi" "Mardi" etc ... si el usuario es francés.

He leído esta publicación, pero solo devuelve un int, no una cadena con el día en el idioma del usuario: ¿Cuál es la forma más fácil de obtener el día actual de la semana en Android?

De manera más general, ¿cómo se escriben todos los días de la semana y todos los meses del año en el idioma del usuario?

Creo que esto es posible, ya que, por ejemplo, la agenda de Google da los días y meses escritos en el idioma local del usuario.

Gracias !!

Regis_AG
fuente

Respuestas:

168

Utilice SimpleDateFormat para formatear fechas y horas en una cadena legible por humanos, con respecto a la configuración regional de los usuarios.

Pequeño ejemplo para obtener el día actual de la semana (por ejemplo, "lunes") :

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

fuente
31

Prueba esto:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];
almisoft
fuente
Hola, si usa días de semana cortos, solo muestra una letra. Pero necesito mostrar las primeras 3 letras del día
sankar muniyappa
Tenga en cuenta que para obtener acceso a todas las configuraciones regionales disponibles se debe usar DateFormatSymbols.getInstance()(aunque por ahora podría dar el mismo resultado).
user905686
20

Ya sé que respondió pero quien busca 'Vie' así

para el viernes

SimpleDateFormat sdf = new SimpleDateFormat("EEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

y quién quiere una cadena de fecha completa, puede usar 4E para el viernes

Para el viernes-

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

Disfrutar...

Mente loca
fuente
Recibo un error en su segunda línea que dice que la fecha del constructor no está definida.
17

Para hacer las cosas más cortas, puedes usar esto:

android.text.format.DateFormat.format("EEEE", date);

que devolverá el día de la semana como una cadena.

gswierczynski
fuente
11

Suyo es lo que solía obtener los nombres de los días ( 0-6medios monday - sunday):

public static String getFullDayName(int day) {
    Calendar c = Calendar.getInstance();
    // date doesn't matter - it has to be a Monday
    // I new that first August 2011 is one ;-)
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%tA", c);
}

public static String getShortDayName(int day) {
    Calendar c = Calendar.getInstance();
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%ta", c);
}
Knickedi
fuente
6

tl; dr

String output = 
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
             .getDayOfWeek()
             .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

java.time

Las clases java.time integradas en Java 8 y versiones posteriores y adaptadas a Java 6 y 7 y a Android incluyen la práctica DayOfWeekenumeración.

Los días están numerados de acuerdo con la definición estándar ISO 8601, de 1 a 7 de lunes a domingo.

DayOfWeek dow = DayOfWeek.of( 1 );

Esta enumeración incluye el getDisplayNamemétodo para generar una cadena del nombre traducido localizado del día.

El Localeobjeto especifica un lenguaje humano que se utilizará en la traducción y especifica las normas culturales para decidir cuestiones como las mayúsculas y la puntuación.

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

Para obtener la fecha de hoy, use la LocalDateclase. Tenga en cuenta que una zona horaria es crucial, ya que en un momento dado la fecha varía en todo el mundo.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DayOfWeek dow = today.getDayOfWeek();
String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

Tenga en cuenta que la configuración regional no tiene nada que ver con la zona horaria. Hay dos cuestiones ortogonales distintas separadas. Es posible que desee una presentación en francés de una fecha y hora dividida en zonas en la India ( Asia/Kolkata).

Joda-Time

ACTUALIZACIÓN: El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

La biblioteca Joda-Time proporciona Localeuna localización impulsada por los valores de fecha y hora.

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatterUnJourQuébécois = DateTimeFormat.forPattern( "EEEE" ).withLocale( locale );

String output = formatterUnJourQuébécois.print( now );

System.out.println("output: " + output );

salida: samedi


Acerca de 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?

Albahaca Bourque
fuente
5

Prueba esto...

//global declaration
private TextView timeUpdate;
Calendar calendar;

.......

timeUpdate = (TextView) findViewById(R.id.timeUpdate); //initialize in onCreate()

.......

//in onStart()
calendar = Calendar.getInstance();
//date format is:  "Date-Month-Year Hour:Minutes am/pm"
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm a"); //Date and time
String currentDate = sdf.format(calendar.getTime());

//Day of Name in full form like,"Saturday", or if you need the first three characters you have to put "EEE" in the date format and your result will be "Sat".
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE"); 
Date date = new Date();
String dayName = sdf_.format(date);
timeUpdate.setText("" + dayName + " " + currentDate + "");

El resultado es... ingrese la descripción de la imagen aquí

codificación feliz .....

Silambarasan Poonguti
fuente
4

Perdón por la respuesta tardía, pero esto funcionaría correctamente.

daytext=(textview)findviewById(R.id.day);

Calender c=Calender.getInstance();
SimpleDateFormat sd=new SimpleDateFormat("EEEE");
String dayofweek=sd.format(c.getTime());


daytext.setText(dayofweek);
Ajinkya
fuente
2
(1) Esta solución ya está cubierta en la Respuesta aceptada . Explica cómo el tuyo agrega valor adicional o elimina. (2) Estas clases ahora son heredadas, reemplazadas por las clases java.time.
Basil Bourque
1

Solo uso esta solución en Kotlin:

 var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String
jafar_aml
fuente
0
//selected date from calender
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); //Date and time
String currentDate = sdf.format(myCalendar.getTime());

//selcted_day name
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE");
String dayofweek=sdf_.format(myCalendar.getTime());
current_date.setText(currentDate);
lbl_current_date.setText(dayofweek);

Log.e("dayname", dayofweek);
savithri
fuente
1
Eso es ilegible. Y está utilizando las clases mal diseñadas y obsoletas desde hace mucho tiempo SimpleDateFormat, Datey Calendar(también se usa en la pregunta).
Ole VV