2013-07-29 41 views
4

我正在用Java編寫程序,我需要確定某個日期是否是週末。但是,我需要考慮到,在不同的國家,週末的不同日子會有不同的日子。在以色列,星期五和星期六是一些伊斯蘭國家的週四和週五。欲瞭解更多詳情,你可以檢查出this Wikipedia article。有沒有簡單的方法來做到這一點?如何檢查某個日期是否考慮到Java中的當前語言環境是否是週末?

+0

在我看來,這似乎不是我信息存儲在一個語言環境中。 –

+0

你應該真的考慮轉換到JodaTime而不是使用Java的日期/時間的東西。 (除非你使用的是Java 8,並且不需要支持以前的Java框架--JodaTime或多或少地內置於Java 8中,名稱不同。) – RenniePet

+0

@RenniePet是[Joda-Time](http ://www.joda.org/joda-time/)是一個很棒的圖書館。但我不明白它對這個問題有什麼幫助。據我所知,Joda-Time不包括週末與週末相關的任何區域信息。 Joda-Time確實支持[ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)標準周,但不支持其他文化周。如果您有一些可以分享的見解或示例代碼,請發佈答案。 –

回答

0

Java Calendar類具有此功能,getFirstDayOfWeek method。從Calendar文檔引用:一週的第一天,在第一週的最少天數(從1到7):

日曆使用兩個參數定義了一個特定於區域的7天周。這些數字是在構建日曆時從地區資源數據中獲取的。它們也可以通過設置其值的方法明確指定。

所以有了這些信息,你就可以計算出一天是否是週末的一天。

final Calendar cal = Calendar.getInstance(new Locale("he_IL")); 
    System.out.println("Sunday is the first day of the week in he_IL? " + (Calendar.SUNDAY == cal.getFirstDayOfWeek())); 

輸出:

Sunday is the first day of the week in he_IL? true 
+6

根據這一點,它是en_US的星期天。這裏有個大缺陷:'getFirstDayOfWeek'返回通常是打印日曆上的第一天,而不是工作周的第一天。 http://ideone.com/zX4Pcc – zapl

2

根據您發送我已經解決了它爲自己的維基以下代碼:

private static final List<String> sunWeekendDaysCountries = Arrays.asList(new String[]{"GQ", "IN", "TH", "UG"}); 
private static final List<String> fryWeekendDaysCountries = Arrays.asList(new String[]{"DJ", "IR"}); 
private static final List<String> frySunWeekendDaysCountries = Arrays.asList(new String[]{"BN"}); 
private static final List<String> thuFryWeekendDaysCountries = Arrays.asList(new String[]{"AF"}); 
private static final List<String> frySatWeekendDaysCountries = Arrays.asList(new String[]{"AE", "DZ", "BH", "BD", "EG", "IQ", "IL", "JO", "KW", "LY", "MV", "MR", "OM", "PS", "QA", "SA", "SD", "SY", "YE"}); 

public static int[] getWeekendDays(Locale locale) { 
    if (thuFryWeekendDaysCountries.contains(locale.getCountry())) { 
     return new int[]{Calendar.THURSDAY, Calendar.FRIDAY}; 
    } 
    else if (frySunWeekendDaysCountries.contains(locale.getCountry())) { 
     return new int[]{Calendar.FRIDAY, Calendar.SUNDAY}; 
    } 
    else if (fryWeekendDaysCountries.contains(locale.getCountry())) { 
     return new int[]{Calendar.FRIDAY}; 
    } 
    else if (sunWeekendDaysCountries.contains(locale.getCountry())) { 
     return new int[]{Calendar.SUNDAY}; 
    } 
    else if (frySatWeekendDaysCountries.contains(locale.getCountry())) { 
     return new int[]{Calendar.FRIDAY, Calendar.SATURDAY}; 
    } 
    else { 
     return new int[]{Calendar.SATURDAY, Calendar.SUNDAY}; 
    } 
} 
相關問題