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 !!
źródło
DateFormatSymbols.getInstance()
(chociaż na razie może to dać ten sam wynik).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ę...
źródło
Aby skrócić rzeczy, możesz użyć tego:
android.text.format.DateFormat.format("EEEE", date);
co zwróci dzień tygodnia jako ciąg.
źródło
Jej użyłem do określenia nazw dni (
0-6
czyli środkówmonday - 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); }
źródło
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
DayOfWeek
wyliczenie.Dni są numerowane zgodnie ze standardową definicją ISO 8601, 1-7 od poniedziałku do niedzieli.
DayOfWeek dow = DayOfWeek.of( 1 );
To wyliczenie zawiera
getDisplayName
metodę generowania ciągu przetłumaczonej przetłumaczonej nazwy dnia.Locale
Obiekt określa język ludzi, do wykorzystania w tłumaczeniu, i określa normy kulturowe zdecydować kwestie takie jak kapitalizacji i interpunkcji.Aby uzyskać dzisiejszą datę, użyj
LocalDate
zajęć. 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
Locale
lokalizację 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 );
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
, iSimpleDateFormat
.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?
źródło
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...
miłego kodowania .....
źródło
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);
źródło
Po prostu używam tego rozwiązania w Kotlinie:
var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String
źródło
Jeśli używasz ThreetenABP datę bibliotekę bt Jake Warthon można zrobić:
na twojej
dayOfWeek
instancji. Więcej na: https://github.com/JakeWharton/ThreeTenABP https://www.threeten.org/threetenbp/apidocs/org/threeten/bp/format/TextStyle.htmlźródło
//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);
źródło
SimpleDateFormat
,Date
iCalendar
(również używane w pytaniu).