Czy istnieje format daty do wyświetlania dnia tygodnia w Javie?

128

Znam formaty daty, takie jak
"yyyy-mm-dd"-który wyświetla datę w formacie 2011-02-26
"yyyy-MMM-dd"-który wyświetla datę w formacie2011-FEB-26

do wykorzystania np .:

SimpleDateFormat formatter = new SimpleDateFormat(
                "yyyy/MMM/dd ");

Potrzebuję formatu, który pomógłby mi wyświetlić dzień tygodnia 2011-02-MONlub cokolwiek. Chcę tylko, aby dzień tygodnia był wyświetlany w postaci znaków z miesiącem i rokiem. Czy możesz mi opowiedzieć o takim formacie?

rogerstone
źródło
1
A co powiesz na użycie ddjako formatu?
Johan Sjöberg,
3
Jestem pewien, że dokumentacja API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ) z przyjemnością udzieli odpowiedzi.
M. Jessup,
1
co to znaczy „dzień” - dzień tygodnia, dzień miesiąca. W Twoim przykładzie wyświetlana jest cała data. Pokaż dokładne dane wejściowe i wyjściowe, które chcesz.
Bozho,
2
Generalnie lepiej używać -notacji tylko z datami w formacie ISO (np. Rok-miesiąc-dzień). Kreska została tam wybrana, ponieważ nie była wtedy używana w żadnym innym formacie daty, aby uniknąć nieporozumień, a teraz wszyscy używają jego niestandardowej kolejności z myślnikiem ...
Paŭlo Ebermann

Odpowiedzi:

322

Powinno to wyświetlić „Wt”:

new SimpleDateFormat("EEE").format(new Date());

Powinno to wyświetlić „wtorek”:

new SimpleDateFormat("EEEE").format(new Date());

Powinno to wyświetlić „T”:

new SimpleDateFormat("EEEEE").format(new Date());

Twój konkretny przykład to:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());
Nathan Feger
źródło
5
Piękne rozwiązanie! Szukałem: poniedziałek, 04.04.2016. Więc w moim przypadku, new SimpleDateFormat("EEEE, dd/MM/yyyy");jeśli to pomoże komuś w przyszłości.
AuroMetal
1
OK, działa. EEEEwyświetla pełne nazwy dni tygodnia - np. „poniedziałek”, „wtorek” itp.
kosiara - Bartosz Kosarzycki
Tak naprawdę nie myślałem, że ta strona w ogóle będzie istnieć, nie mówiąc już o java w końcu poradzi sobie z wykupieniem Date. Technicznie odpowiada na pytanie dotyczące PO. Jednak prawdopodobnie mógłbym dodać nową sekcję o tym, jak działają nowe rzeczy java.time
Nathan Feger
18

Tak - „E” załatwia sprawę

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-E");
System.out.println(df.format(date));
zestaw narzędzi
źródło
5
Widzenie wyroczni w adresie URL javadoców nadal wydaje się dziwne.
Nathan Feger,
Używamy również: DateFormat df = new SimpleDateFormat("yyyy-MM-EEEEEEE");do wyświetlania długiego DayOfWeek.
Do Nhu Vy
4
SimpleDateFormat sdf=new SimpleDateFormat("EEE");

EEE oznacza dzień tygodnia, na przykład czwartek jest wyświetlany jako czw.

user2824143
źródło
3

tl; dr

LocalDate.of( 2018 , Month.JANUARY , 23 )
         .format( DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US )  )

java.time

Nowoczesne podejście wykorzystuje klasy java.time.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;

Zwróć uwagę, jak określamy, na Localeprzykład, Locale.CANADA_FRENCHaby określić ludzki język używany do tłumaczenia nazwy dnia.

DateTimeFormatter f = DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US ) ;
String output = ld.format( f ) ;

ISO 8601

Nawiasem mówiąc, może być zainteresowany w normie ISO 8601 tygodni schematu numeracji: yyyy-Www-d.

2018-W01-2

Tydzień # 1 to pierwszy czwartek roku kalendarzowego. Tydzień zaczyna się w poniedziałek. Rok ma 52 lub 53 tygodnie. Ostatnie / pierwsze dni roku kalendarzowego mogą wylądować w kolejnym / poprzednim roku tygodniowym.

Pojedyncza cyfra na końcu to dzień tygodnia, 1-7 od poniedziałku do niedzieli.

Dodaj klasę biblioteki ThreeTen-Extra do projektu dla YearWeekklasy.


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?

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 .

Basil Bourque
źródło
2

Wiem, że pytanie dotyczy podania dnia tygodnia jako ciągu (np. Krótkiej nazwy), ale dla każdego, kto szuka numerycznego dnia tygodnia (tak jak ja), możesz użyć nowego ciągu formatu "u", obsługiwanego od wersji Java 7. Na przykład:

new SimpleDateFormat("u").format(new Date());

zwraca dzisiejszy indeks dnia tygodnia, a mianowicie: 1 = poniedziałek, 2 = wtorek, ..., 7 = niedziela.

Sal Borrelli
źródło