這讓我瘋狂!如何查找Android上給定星期的日期範圍?
我已經到處搜尋,發現例如這個問題:How to get dates of a week (I know week number)?
但是我不能讓它在我工作的實施(在Android API19在Nexus 7):
public Pair<String,String> getWeekRange(int year, int week_no) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, week_no);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date monday = cal.getTime();
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Date sunday = cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
return new Pair<String,String>(sdf.format(monday), sdf.format(sunday));
}
任何打電話給getWeekRange(2014, WEEK)
,它總是給我第2周的日期範圍(恰好是今天的本週數)?
日曆似乎是一個非常令人困惑的類,並且一定有我不明白的東西。但根據文檔,YEAR
,WEEK_OF_YEAR
和DAY_OF_WEEK
應該足以供我設置。
Some test data:
01-10 18:28:54.730: V/JSON(24503): Week 1/2014 is date range:2014-01-06 to 2014-01-12
01-10 18:28:54.730: V/JSON(24503): Week 2/2014 is date range:2014-01-06 to 2014-01-12
01-10 18:28:54.730: V/JSON(24503): Week 3/2014 is date range:2014-01-06 to 2014-01-12
01-10 18:28:54.730: V/JSON(24503): Week 4/2014 is date range:2014-01-06 to 2014-01-12
01-10 18:28:54.740: V/JSON(24503): Week 5/2014 is date range:2014-01-06 to 2014-01-12
01-10 18:28:54.740: V/JSON(24503): Week 1/2013 is date range:2013-01-07 to 2013-01-13
01-10 18:28:54.740: V/JSON(24503): Week 2/2013 is date range:2013-01-07 to 2013-01-13
01-10 18:28:54.740: V/JSON(24503): Week 3/2013 is date range:2013-01-07 to 2013-01-13
01-10 18:28:54.740: V/JSON(24503): Week 4/2013 is date range:2013-01-07 to 2013-01-13
01-10 18:28:54.740: V/JSON(24503): Week 5/2013 is date range:2013-01-07 to 2013-01-13
任何人都可以看到我的錯誤嗎?任何幫助表示讚賞。
**編輯**
似乎代碼在Windows上運行正常,這是一個孤立的Android問題。
您的代碼工作完全沒有太大的變化([鏈接到ideone]( http://ideone.com/OfWIVp))。我所做的只是將函數'static',並將其更改爲打印輸出,而不是返回'Pair'。 –
dasblinkenlight
我必須在這裏同意dasblinkenlight。您的代碼看起來不錯,並且在我測試時按預期工作。你確定你是在測試發佈的代碼而不是其他的嗎?你使用哪個Java版本? – jarnbjo
是的java.util.Calendar和Date類令人困惑。避免他們兩個。它們非常糟糕,以至於它們在Java 8中被JSR 310定義的新java.time。*類所取代,並受到[Joda-Time](http://www.joda.org/joda-time/)庫的啓發。在您轉移到Java 8之前,請使用Joda-Time。 –