Android: jak sprawdzić aktualny dzień tygodnia (poniedziałek, itp…) w języku użytkownika?


80

Chcę wiedzieć, jaki jest aktualny dzień tygodnia (poniedziałek, wtorek ...) w lokalnym języku użytkownika. Na przykład „Lundi” „Mardi” itp., Jeśli użytkownik jest Francuzem.

Przeczytałem ten post, ale zwraca on tylko int, a nie ciąg znaków z dniem w języku użytkownika: Jaki jest najłatwiejszy sposób uzyskania aktualnego dnia tygodnia w Androidzie?

Mówiąc bardziej ogólnie, w jaki sposób wszystkie dni tygodnia i wszystkie miesiące w roku są napisane w języku użytkownika?

Myślę, że jest to możliwe, ponieważ na przykład agenda Google podaje dni i miesiące zapisane w lokalnym języku użytkownika.

Dzięki !!

Odpowiedzi:


168

Użyj SimpleDateFormat, aby sformatować daty i godziny w ciągu czytelnym dla człowieka, z uwzględnieniem ustawień regionalnych użytkownika.

Mały przykład pokazujący aktualny dzień tygodnia (np. „Poniedziałek”) :

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

31

Spróbuj tego:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];

Cześć, jeśli używasz krótkich dni tygodnia, pokazuje tylko jedną literę. Ale muszę pokazać pierwsze 3 litery dnia
sankar muniyappa

Zauważ, że aby uzyskać dostęp do wszystkich dostępnych lokalizacji, należy użyć DateFormatSymbols.getInstance()(chociaż na razie może to dać ten sam wynik).
user905686

20

Wiem, że już odpowiedziałem, ale kto szuka „pt” w ten sposób

na piątek -

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

a kto chce pełnego ciągu daty, może użyć 4E w piątek

Na piątek-

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

Cieszyć się...


W drugiej linii pojawia się błąd informujący, że data konstruktora jest niezdefiniowana.

17

Aby skrócić rzeczy, możesz użyć tego:

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

co zwróci dzień tygodnia jako ciąg.


11

Jej użyłem do określenia nazw dni ( 0-6czyli środków 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);
}

6

tl; dr

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

java.time

Klasy java.time wbudowane w Javę 8 i nowszych oraz przeniesione wstecz na Javę 6 i 7 oraz na Androida zawierają przydatne DayOfWeekwyliczenie.

Dni są numerowane zgodnie ze standardową definicją ISO 8601, 1-7 od poniedziałku do niedzieli.

DayOfWeek dow = DayOfWeek.of( 1 );

To wyliczenie zawiera getDisplayNamemetodę generowania ciągu przetłumaczonej przetłumaczonej nazwy dnia.

LocaleObiekt określa język ludzi, do wykorzystania w tłumaczeniu, i określa normy kulturowe zdecydować kwestie takie jak kapitalizacji i interpunkcji.

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

Aby uzyskać dzisiejszą datę, użyj LocalDatezajęć. Pamiętaj, że strefa czasowa ma kluczowe znaczenie, ponieważ w dowolnym momencie data różni się na całym świecie.

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

Pamiętaj, że ustawienie regionalne nie ma nic wspólnego ze strefą czasową. Dwa oddzielne, odrębne kwestie ortogonalne. Możesz chcieć francuskiej prezentacji strefy daty i czasu w Indiach ( Asia/Kolkata).

Joda-Time

UPDATE: Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .

Biblioteka Joda-Time zapewnia Localelokalizację wartości daty i godziny na podstawie sterowania.

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

wyjście: samedi


Informacje o java.time

Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak java.util.Date, Calendar, i SimpleDateFormat.

Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .

Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .

Skąd wziąć klasy java.time?


5

Spróbuj tego...

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

Wynik to... wprowadź opis obrazu tutaj

miłego kodowania .....


4

Przepraszamy za spóźnioną odpowiedź, ale to działałoby poprawnie.

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

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


daytext.setText(dayofweek);

2
(1) To rozwiązanie jest już uwzględnione w zaakceptowanej odpowiedzi . Wyjaśnij, w jaki sposób Twój dodaje dodatkowej wartości, lub usuń. (2) Te klasy są teraz starsze, zastąpione przez klasy java.time.
Basil Bourque

1

Po prostu używam tego rozwiązania w Kotlinie:

 var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String


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

1
To nieczytelne. I używasz źle zaprojektowanych klas i długo nieaktualne SimpleDateFormat, Datei Calendar(również używane w pytaniu).
Ole VV
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.