Na przykład mam datę: „23/2/2010” (23 lutego 2010 r.). Chcę przekazać go do funkcji, która zwróci dzień tygodnia . W jaki sposób mogę to zrobić?
W tym przykładzie funkcja powinna zwrócić String
„wt”.
Dodatkowo, jeśli pożądany jest tylko porządek dnia, jak można go odzyskać?
Calendar
klasie, takich jakCalendar.SUNDAY
lubCalendar.JANUARY
.Calendar
,Date
a takżeDateTimeFormat
(i czasu Jody) i użyćjava.time
klas Java 8 , na przykładYearMonth
lubLocalDate
. Zobacz więcej w tej odpowiedzi .java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są już starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i Javę 9. Zobacz samouczek Oracle .Użyj tego kodu, aby znaleźć nazwę dnia od daty wprowadzenia. Prosta i dobrze przetestowana.
źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są już starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i Javę 9. Zobacz samouczek Oracle .Wystarczy użyć SimpleDateFormat .
Rezultat to: sob., 28 grudnia 2013
Domyślny konstruktor przyjmuje „domyślne” ustawienia narodowe , więc należy zachować ostrożność, używając go, gdy potrzebujesz określonego wzorca.
źródło
tl; dr
Korzystanie java.time ...
Zobacz ten kod uruchamiany na żywo na IdeOne.com (ale
Locale.US
działa tylko tam).java.time
Zobacz mój przykładowy kod powyżej i prawidłową odpowiedź dla java.time Przemka .
Liczba porządkowa
W przypadku liczby porządkowej rozważ
DayOfWeek
użycie obiektu enum, takiego jakDayOfWeek.TUESDAY
. Pamiętaj, że aDayOfWeek
to inteligentny obiekt, a nie tylko ciąg znaków lub liczba całkowita. Korzystanie z tych obiektów wyliczeniowych sprawia, że kod jest bardziej samodokumentujący, zapewnia prawidłowe wartości i zapewnia bezpieczeństwo typu .Ale jeśli nalegasz, poproś
DayOfWeek
o numer . Dostajesz 1-7 za poniedziałek-niedzielę zgodnie z normą ISO 8601 .Joda-Time
AKTUALIZACJA: Projekt Joda-Time jest teraz w trybie konserwacji. Zespół zaleca migrację do klas java.time. Framework java.time jest wbudowany w Javę 8 (a także przeniesiony z powrotem do Java 6 i 7 i dodatkowo dostosowany do Androida ).
Oto przykładowy kod wykorzystujący bibliotekę Joda-Time w wersji 2.4, jak wspomniano w zaakceptowanej odpowiedzi Bozho . Joda-Time jest znacznie lepszy od klas java.util.Date/.Calendar dołączonych do Javy.
LocalDate
Joda-Time oferuje
LocalDate
klasie reprezentację tylko daty, bez żadnej pory dnia ani strefy czasowej. Właśnie tego wymaga to pytanie. Stare klasy java.util.Date/.Calendar w pakiecie z Javą nie mają tej koncepcji.Analizować
Przekształć ciąg w wartość daty.
Wyciąg
Wyodrębnij z wartości daty dzień tygodnia numer i nazwisko.
Wysypisko
Zrzut do konsoli.
Biegać
Po uruchomieniu.
O java.time
Środowisko java.time jest wbudowane w Javę 8 i nowsze wersje . Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak
java.util.Date
,Calendar
, iSimpleDateFormat
.Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do java.time klas .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Gdzie można uzyskać klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak
Interval
,YearWeek
,YearQuarter
, i więcej .źródło
java.time
Korzystanie ze
java.time
środowiska wbudowanego w Javę 8 i nowszych.Enum może generować ciąg znaków dniu nazwy automatycznie zlokalizowaną na język ludzki i normom kulturowym . Podaj a, aby wskazać, że chcesz użyć długiej formy lub skróconej nazwy.
DayOfWeek
Locale
TextStyle
źródło
Możesz wypróbować następujący kod:
źródło
LocalDate
? Czytałeś je przed opublikowaniem?źródło
Dla Java 8 lub nowszej , LOCALDATE jest korzystne
Uwaga: jeśli dane wejściowe są zdefiniowane jako String / User, powinieneś parsować je na int .
źródło
źródło
Innym „zabawnym” sposobem jest użycie algorytmu Doomsday . Jest to metoda znacznie dłuższa, ale jest także szybsza, jeśli nie trzeba tworzyć obiektu kalendarza z określoną datą.
źródło
Można użyć następującego fragmentu kodu dla danych wejściowych takich jak (dzień = „08”, miesiąc = „05”, rok = „2015”, a wynikiem będzie „ŚRODA”)
źródło
Odpowiedź w jednym wierszu:
Przykład użycia:
źródło
źródło
źródło
Hackerrank Java Date and Time jest wyzwaniem
osobiście wolę klasę LocalDate.
Jest jedno wideo na temat tego wyzwania.
Rozwiązanie Hackerrank dla daty i godziny Java
Mam nadzieję, że to pomoże :)
źródło
Calendar
klasy, należy pamiętać, żeset
metoda w Kalendarzu trwa miesiącami od 0, tj0 for January
. Dziękuję Ci!Dodanie innego sposobu zrobienia tego dokładnie o to, o co poprosił PO, bez korzystania z najnowszych wbudowanych metod:
źródło
SimpleDateFormat
iDate
. W szczególności nie należy używać przestarzałejgetDay
metody, ponieważ nie jest ona wiarygodna. I nie powinieneś używaćif
-else
do wybierania spośród 7 wartości, po to mamyswitch
, lub możesz użyć tablicy. Podsumowując, Twój kod jest zarówno dłuższy, jak i bardziej skomplikowany, niż to konieczne.źródło
Program do znalezienia dnia tygodnia, podając datę wprowadzenia miesiąca i roku za pomocą
java.util.scanner
pakietu:źródło
java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są już starsze , zastąpione przez klasy java.time wbudowane w Javę 8 i Javę 9. Zobacz samouczek Oracle .if ((ym%4==0) && (gm==2)){ d=(gd+m[gm-1]+ym+yp+y[a]-1)%7;
Uzyskaj wartość dnia, podając aktualny znacznik czasu.
źródło
źródło
metoda poniżej pobiera siedem dni i zwraca krótką nazwę dni w Tablicy list w Kotlinie, ale możesz po prostu sformatować format w formacie Java, przedstawiając tylko pomysł, jak Kalendarz może zwrócić krótką nazwę
out umieścić wyniki jak
źródło
Calendar
klasy w 2019 roku. Jest źle zaprojektowana i dawno przestarzała. Zamiast tego polecamLocalDate
iDayOfWeek
od java.time nowoczesny interfejs API daty i godziny Java .Możesz użyć poniższej metody, aby uzyskać Dzień tygodnia, przechodząc określoną datę,
Tutaj dla ustawionej metody klasy Calendar, Tricky część jest indeksem dla parametru miesiąc zacznie się od 0 .
źródło
Klasa kalendarza ma wbudowaną funkcjonalność displayName:
Dostępne od wersji Java 1.6. Zobacz także dokumentację Oracle
źródło
Działa to poprawnie ...
Zapewnia wbudowaną metodę getDayOfWeek (), aby uzyskać dzień określonego tygodnia:
Aby przypisać wartość wyliczenia
l.getDayOfWeek()
do łańcucha, prawdopodobnie możesz użyć metody Enum,name()
która zwraca wartość obiektu wyliczanego.źródło
listHolidays.add(LocalDate.of(year, 1, 1));
do odpowiedzi. Jeśli chcesz poprawić odpowiedź, powinieneś dodać własną. Mam nadzieję, że to pomożePoniżej znajduje się dwie linie fragmentu kodu używającego interfejsu API Java 1.8 Time dla Twojego wymagania.
źródło