Android: Wie erhalte ich den aktuellen Wochentag (Montag usw.) in der Sprache des Benutzers?

80

Ich möchte wissen, welcher aktuelle Wochentag (Montag, Dienstag ...) in der Landessprache des Benutzers ist. Zum Beispiel "Lundi", "Mardi" usw., wenn der Benutzer Franzose ist.

Ich habe diesen Beitrag gelesen, aber er gibt nur ein int zurück, keine Zeichenfolge mit dem Tag in der Sprache des Benutzers: Was ist der einfachste Weg, um den aktuellen Wochentag in Android abzurufen?

Wie erhalten Sie im Allgemeinen alle Wochentage und alle Monate des Jahres in der Sprache des Benutzers geschrieben?

Ich denke, dass dies möglich ist, da beispielsweise die Google-Agenda die Tage und Monate in der Landessprache des Nutzers angibt.

Vielen Dank !!

Regis_AG
quelle

Antworten:

167

Verwenden Sie SimpleDateFormat, um Datums- und Uhrzeitangaben in Bezug auf das Gebietsschema des Benutzers in eine für Menschen lesbare Zeichenfolge zu formatieren.

Kleines Beispiel zum Abrufen des aktuellen Wochentags (z. B. "Montag") :

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

quelle
31

Versuche dies:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];
almisoft
quelle
HI, wenn Sie kurze Wochentage verwenden, zeigt es nur einen Buchstaben. Aber ich muss die ersten 3 Buchstaben des Tages zeigen
sankar muniyappa
Beachten Sie, dass Sie verwenden sollten, um Zugriff auf alle verfügbaren Gebietsschemas zu erhalten DateFormatSymbols.getInstance()(obwohl dies vorerst möglicherweise das gleiche Ergebnis liefert).
user905686
20

Ich weiß schon geantwortet aber wer sucht 'Fr' so

für Fr -

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

und wer eine vollständige Datumszeichenfolge möchte, kann 4E für Freitag verwenden

Für Freitag-

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

Genießen...

CrazyMind
quelle
In Ihrer zweiten Zeile wird die Fehlermeldung angezeigt, dass das Konstruktordatum nicht definiert ist.
17

Um die Dinge kürzer zu machen Sie können dies verwenden:

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

Dies wird den Wochentag als String zurückgeben.

gswierczynski
quelle
11

Ihr ist, was ich verwendet habe, um die Tagesnamen ( 0-6Mittel monday - sunday) zu erhalten:

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
quelle
6

tl; dr

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

java.time

Die in Java 8 und höher integrierten und auf Java 6 & 7 und Android zurückportierten java.time-Klassen enthalten die praktische DayOfWeekAufzählung.

Die Tage sind gemäß der Standarddefinition ISO 8601 von Montag bis Sonntag mit 1-7 nummeriert.

DayOfWeek dow = DayOfWeek.of( 1 );

Diese Aufzählung enthält die getDisplayNameMethode zum Generieren einer Zeichenfolge des lokalisierten übersetzten Namens des Tages.

Das LocaleObjekt spezifiziert eine menschliche Sprache, die bei der Übersetzung verwendet werden soll, und spezifiziert kulturelle Normen, um Fragen wie Großschreibung und Zeichensetzung zu entscheiden.

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

Verwenden Sie die LocalDateKlasse , um das heutige Datum zu erhalten . Beachten Sie, dass eine Zeitzone von entscheidender Bedeutung ist, da das Datum für jeden Moment weltweit variiert.

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

Beachten Sie, dass das Gebietsschema nichts mit der Zeitzone zu tun hat. Zwei separate orthogonale Probleme. Vielleicht möchten Sie eine französische Präsentation einer in Indien in Zonen aufgeteilten Datums- und Uhrzeit ( Asia/Kolkata).

Joda-Zeit

UPDATE: Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .

Die Joda-Time- Bibliothek bietet eine Localegesteuerte Lokalisierung von Datums- und Uhrzeitwerten.

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 );

Ausgabe: samedi


Über java.time

Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date, Calendar, & SimpleDateFormat.

Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .

Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .

Woher bekomme ich die java.time-Klassen?

Basil Bourque
quelle
5

Versuche dies...

//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 + "");

Das Ergebnis ist... Geben Sie hier die Bildbeschreibung ein

Happy Coding .....

Silambarasan Poonguti
quelle
3

Entschuldigung für die späte Antwort. Aber das würde richtig funktionieren.

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
quelle
2
(1) Diese Lösung ist bereits in der akzeptierten Antwort enthalten . Erklären Sie, wie Ihr Wert weiter steigt, oder löschen Sie. (2) Diese Klassen sind jetzt Legacy-Klassen und werden durch die Klassen java.time ersetzt.
Basil Bourque
1

Ich benutze diese Lösung nur in Kotlin:

 var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String
jafar_aml
quelle
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
quelle
1
Das ist unlesbar. Und Sie werden mit den schlecht gestalteten Klassen und lange veralten SimpleDateFormat, Dateund Calendar(auch in der Frage verwendet wird ).
Ole VV