TL;博士
Boolean isWeekend = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY).contains (Instant.ofEpochSecond(1342162320L).atZone(ZoneId.of("Europe/Helsinki")).getDayOfWeek())
詳細
其他的答案是正確的,但使用過時的遺留類。改用java.time類。
問題的週末部分很容易使用內置的Java庫。您可以定義一組週末的週末,如週日在美國的星期六&。
覆蓋假期需要某種外部庫,Web服務或數據庫。假日的定義隨着時間和管轄權和傳統而變化。我會忽略問題的這一部分;作爲一種可能的解決方案,請參閱Answer by Kennet。
DayOfWeek
的DayOfWeek
枚舉標識每個七個星期幾。您可以詢問ZonedDateTime
的DayOfWeek
。
首先解析你的輸入號碼。似乎是自1970年第一時間以UTC開始的整秒計數。注意L
結束,使這個long
整數。
Instant instant = Instant.ofEpochSecond(1342162320L);
應用時區。
ZoneId zoneId = ZoneId.of("Europe/Helsinki");
ZonedDateTime zdt = instant.atZone(zoneId);
通過詢問星期幾是星期六還是星期天來測試周末。
DayOfWeek dow = zdt.getDayOfWeek();
Boolean isWeekend = (dow.equals(DayOfWeek.SATURDAY) || dow.equals(DayOfWeek.SUNDAY));
EnumSet
你也可以使用一個EnumSet
,快速執行和低內存佔用。
Set<DayOfWeek> weekend = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY);
聲明此爲static final
常數如果定義不你的應用程序的執行過程中發生改變。
static final Set<DayOfWeek> WEEKEND = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY);
當你得到一個DayOfWeek
對象,看它是否包含在EnumSet這是Set
接口的實現。
Boolean isWeekend = WEEKEND.contains(dow.getDayOfWeek());
java.time
的java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date
,.Calendar
,& java.text.SimpleDateFormat
。
Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。
大部分的java.time功能後移植到Java 6 和ThreeTenABP還適於Android。
ThreeTen-Extra項目擴展java.time與其他類。這個項目是未來可能增加java.time的一個試驗場。
假期?你是說世界上每個國家都有不同的變化?在同一個國家不同的宗教,他們的宗教節日不匹配。 – bezmax 2012-07-13 07:47:22
@Max嗯,我的意思是像日曆中的紅色假日,只有大的。一種全球性的。 – Jaanus 2012-07-13 07:48:33
看看http://stackoverflow.com/questions/1044921/a-good-business-calendar-library-in-java,這可能是你正在尋找的想法。 – 2012-07-13 07:49:19