2013-03-27 166 views
1

日曆API令我困惑。我想要做的事似乎很簡單,但並不真正爲我工作。如何獲得星期一開始的特定日期的星期幾?

我想將星期的第一天設置爲星期一,而不是默認的星期天(我知道它不同於Locale,但我希望總是在星期一執行)。最重要的是,對於給定的日期,我想檢索它代表的星期幾(例如,星期一爲1,星期日爲7)。

有沒有辦法用默認的Calendar API來做到這一點?我已經試過類似:

Calendar cal = Calendar.getInstance(); 
cal.setFirstDayOfWeek(Calendar.MONDAY); 
cal.setTime(<some Date object that's a monday>); 
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); 

它給了我2,而不是1。我懷​​疑這是因爲它給我的Calendar.MONDAY的價值,但我不能完全肯定。基於這種懷疑,下面的工作:

Calendar cal = Calendar.getInstance(); 
cal.setTime(<some Date object that's a monday>); 
System.out.println(
    (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) ? 
     7 : cal.get(Calendar.DAY_OF_WEEK) - 1); 

......但我寧願沒有那個if語句。有沒有辦法通過直接的Calendar API來完成我想要的功能?

回答

2

看看日曆源,看起來setFirstDayOfWeek實際上只會影響WEEK_OF_MONTH和WEEK_OF_YEAR的計算。不管什麼你一天的一週開始於週一仍然是星期一,在日曆週一一直2.

+0

OK可以找到,所以我還要做什麼,我做了上述其中工程。至少它會始終如一,不管區域設置如何,因爲Calendar.MONDAY總是2. – Depressio 2013-03-27 18:15:48

0

塊引用

一週的第一天值從當前的區域設置的。如果您未設置日曆的語言環境(Calendar.getInstance(Locale)或新的GregorianCalendar(Locale)),它將使用系統的默認值。系統的默認值可以通過JVM參數覆蓋:

public static void main(String [] args){c} = new GregorianCalendar(); System.out.println(Locale.getDefault()+「:」+ c.getFirstDayOfWeek()); }

這應該顯示不同的JVM參數語言/國家不同的輸出:

-Duser.language=en -Duser.country=US -> en_US: 1 (Sunday) 
-Duser.language=en -Duser.country=GB -> en_GB: 2 (Monday) 

不要忘了,這可能會改變其他behavio(U)R過。

塊引用

詳細信息可以在下面的鏈接

How to specify firstDayOfWeek for java.util.Calendar using a JVM argument

+0

看起來'Calendar.firstDayOfWeek'與根問題並不真正相關。我認爲這可能是,但它似乎不是!幸運的是,這意味着我不需要搞亂語言環境來解決我的問題。儘管如此,感謝提示! – Depressio 2013-03-27 18:17:16

相關問題