さて、これは私を困惑させています。この文字列を作成しようとする次のコードがあります。
出力:52。2012(12月24日から12月30日)
これは、2012年の第52週の開始と終了であり、月曜日が週の最初の日です。
private Date getDateObject() {
Calendar cld = Calendar.getInstance();
cld.set(Calendar.YEAR, year);
cld.set(Calendar.WEEK_OF_YEAR, week);
cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cld.getTime();
}
private Date getEndDateObject() {
Calendar cld = Calendar.getInstance();
if (week < 52) {
cld.set(Calendar.YEAR, year);
cld.set(Calendar.WEEK_OF_YEAR, week + 1);
} else {
cld.set(Calendar.YEAR, year + 1);
cld.set(Calendar.WEEK_OF_YEAR, 1);
}
cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return cld.getTime();
}
public String getDateRangeString() {
String pattern = "d MMM";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Date startDate = getDateObject();
Date endDate = getEndDateObject();
String startDateFormatted = formatter.format(startDate);
String endDateFormatted = formatter.format(endDate);
String dateString = "" + this.week + ". " + this.year + " (" + startDateFormatted + " to " + endDateFormatted + ")";
return dateString;
}
YEAR=2012およびWEEK=52のオブジェクトで関数getDateRangeStringを使用すると、次のデバイスで次の出力が得られます。
- NexusS-4.1
- エミュレータ4.1
- エミュレータ4.2
出力:52。2012(12月24日から12月30日)
どちらが正しい!
しかし、4.2.1を実行しているNexus7では次のようになります。
出力:52。2012(12月24日から1月6日)
WTF !!?!?
すべてのデバイスはオーストラリアEST+10に設定されており、現在正しい時刻/日付を持っています。これは、4.2で12月が欠落していることとは関係がないと思いますが、とにかく4.2.1で修正する必要があります。
デバッグすると、カレンダーに正しい値がすべて含まれていると表示されます。それでは1月6日が出ますか?
12月31日の奇妙な1つは、53週目か何かのようなものですか?わからない、なぜこのデバイスが違うのかわからない。