2013-08-20 20 views
6

Chciałbym wiedzieć, czy istnieje wyliczenie zawierające wszystkie dni tygodnia w Javie. Używam Kalendarza do obsługi logiki czasowej, ale nie widziałem czegoś takiego (sam mógłbym to zrobić, ale raczej użyłbym czegoś istniejącego). Widziałem także threeten project, ale nadal jest w alfa. Ponieważ wyliczanka zawierająca dni tygodnia jest tak banalna, że ​​słońce pokazuje ją w dokumentacji enum, myślałem, że coś może już istnieć. Jakieś pomysły ?Enum dni w Javie z kalendarzem

+1

Jeśli szukasz rozsądnego interfejsu API z datą i godziną, zajrzyj na http://www.joda.org/joda-time/ - jeśli nie mają wyliczanki dni tygodnia, chociaż. Dlaczego jej potrzebujesz? –

+0

@PhilippReichart Chcę wyświetlać tabele w JSP z kolumną na każdy dzień. – fxm

+0

A więc chodzi o i18n? – atamanroman

Odpowiedz

2

W klasie kalendarzowego, jest:

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Sunday. 
*/ 
public final static int SUNDAY = 1; 

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Monday. 
*/ 
public final static int MONDAY = 2; 

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Tuesday. 
*/ 
public final static int TUESDAY = 3; 

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Wednesday. 
*/ 
public final static int WEDNESDAY = 4; 

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Thursday. 
*/ 
public final static int THURSDAY = 5; 

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Friday. 
*/ 
public final static int FRIDAY = 6; 

/** 
* Value of the {@link #DAY_OF_WEEK} field indicating 
* Saturday. 
*/ 
public final static int SATURDAY = 7; 

(źródło: java.util.Calendar)

Nie enum, ponieważ nie było nikogo kiedy kalendarz został wprowadzony w JDK 1.1.

+0

Jestem świadomy, że mogę uzyskać dostęp do każdego dnia. To, co chcę, to lista zawierająca wszystkie dni bez jej tworzenia. Ponadto chciałbym mieć wartości String, a nie int. – fxm

+0

@fxm, powinieneś utworzyć enum sam, jeśli chcesz, to nie zajmie dużo czasu. Jak powiedzieliśmy, klasa 'Calendar' została wprowadzona przed wyliczeniem przyszedł do Java – SpongeBobFan

+1

Myślę, że zrobię to, to po prostu dziwne coś takiego już nie istnieje. – fxm

2

Kłopotliwe stare klasy czasu i daty, takie jak java.util.Calendar, są już starsze, wyparte przez klasy java.time.

java.time.DayOfWeek enum

Java zawiera teraz java.time.DayOfWeek enum.

Przekaż obiekty tego wyliczenia zamiast zwykłych liczb całkowitych 1-7, aby kod był bardziej samokomponowany, zapewnij bezpieczeństwo typu i zapewnij zakres prawidłowych wartości.

invoices.printReportForDayOfWeek(DayOfWeek.MONDAY); 

Numeracja to 1-7 od poniedziałku do niedzieli, zgodnie z normą ISO 8601.

Uzyskaj zlokalizowaną nazwę dnia, dzwoniąc pod numer getDisplayName.

String output = DayOfWeek.MONDAY.getDisplayName(TextStyle.FULL , Locale.CANADA_FRENCH) ; // Or Locale.US, etc. 

Aby śledzić wiele dni tygodnia, należy użyć EnumSet (wdrożenie Set) lub EnumMap (wdrożenie Map).

Set<DayOfWeek> weekend = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY) ; 
… 
Boolean todayIsWeekend = weekend.contains(LocalDate.now(ZoneId.of("America/Montreal")).getDayOfWeek()); 

O java.time

Ramy java.time jest wbudowana w Java 8 i późniejszych. Klasy te zastępują stare, kłopotliwe klasy czasu i daty, takie jak java.util.Date, .Calendar, java.text.SimpleDateFormat.

Projekt Joda-Time, obecnie w maintenance mode, zaleca migrację do java.time. Aby uzyskać więcej informacji, zobacz

. I wyszukaj Stack Overflow dla wielu przykładów i objaśnień.

Znaczna część funkcjonalności java.time powraca walcowy Java 6 & 7 w ThreeTen-Backport i ponadto dostosowany do Android w ThreeTenABP.

Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem wskazującym na możliwe przyszłe dodatki do java.time. Możesz znaleźć tutaj kilka użytecznych klas, takich jak Interval, YearWeek, YearQuarter i więcej.