2014-11-03 58 views
0

我正在使用以下來獲取每週的 。從0獲取周的範圍

SimpleDateFormat dateFormatforYearWeek = new SimpleDateFormat("yyyyww"); 
String s = dateFormatforYearWeek.format(date) 

對於10月26日這給了我價值201444.但是我希望它得到儘可能201443. 我不知道如何設置的星期爲0 這可能嗎?如果不是,我該如何修改它。

這是正確的方法嗎?

int day = calendar.get(Calendar.DAY_OF_MONTH); 
int year = calendar.get(Calendar.YEAR); 
calendar.add(Calendar.WEEK_OF_YEAR, -1); 
calendar.set(Calendar.DAY_OF_MONTH, day); 
calendar.set(Calendar.YEAR, year); 

SimpleDateFormat dateFormatforYearWeek = new SimpleDateFormat("yyyyww"); 
String s = dateFormatforYearWeek.format(date) 
+2

什麼是你_really_想幹什麼?獲取與[ISO週數](http://www.calendar-365.com/week-number.html)不同的美國週數...? – 2014-11-03 05:39:15

+0

其實在我的數據庫中,一週從0開始。所以我想讓它保持一致。 – Yogi 2014-11-03 05:44:24

+0

看到這個相似的問題,[在java中是否有YYYYWW格式](http://stackoverflow.com/q/24527611/642706) – 2014-11-03 07:27:02

回答

0

我可能會做它,然後按以下方式:

SimpleDateFormat dateFormatForYear = new SimpleDateFormat("yyyy"); 
SimpleDateFormat yearWeekFormat = new SimpleDateFormat("w"); 
Integer   weekFrom0   = Integer.valueOf(yearWeekFormat.format(date)) - 1; 
String   s     = dateFormatForYear.format(date) + weekFrom0; 
0

什麼是一週?

SimpleDateFormat的文檔未能定義它們按周來表示的含義。其他消息來源表明他們打算使用ISO 8601標準的定義。但後來他們通過定義calendar.getMinimalDaysInFirstWeek() == 1而不是4來違反該規定,如this other Answer中所述。

在你的問題中,你一年中的一週是什麼意思?

ISO 8601

正如上面提到的,ISO 8601定義週一一年開始的一個星期,在那裏的第一週包含了一年的第一個星期四。

本標準還定義了一個字符串格式來表示一年中的某一週:YYYY-WwwYYYYWww。注意中間的W。這封信很重要,因爲它避免了year-month格式YYYY-MM含糊不清。如果可能,我建議你遵守ISO 8601。

基於零周計數

我從來沒有聽說過計數週爲零。這對我來說毫無意義;我建議儘可能避免這種情況。

如果不可能,我建議您使用日期時間庫來計算標準的每年一週並減去一個。但我相信這是一條糟糕的旅行道路。

時區

時區是在確定的日期,因此一個星期至關重要。在巴黎週日結束的午夜中風意味着在法國新的一週,同時還在蒙特利爾的「上週」。

喬達時間

舊日期恬類Java中是出了名麻煩的,混亂的,和有缺陷:java.util.Date,java.util.Calendar中,java.text.SimpleDateFormat中。避免它們。可以使用Joda-Time或java。(由Joda-Time提供靈感)內置的實時程序包。

DateTime now = DateTime.now(DateTimeZone.forID("America/Montreal")); 
String output = ISODateTimeFormat.weekyearWeek().print(now); 

運行時。

now: 2014-11-03T02:30:10.124-05:00 
output: 2014-W45 

如果你一定要堅持的是從零開始的週數:

int zeroBasedWeekNumber = (now.getWeekOfWeekyear() - 1) ;