ISO 8601
Joda-Time mengikuti ISO 8601 standar dalam menentukan minggu .
- Senin adalah hari pertama dalam seminggu.
- Minggu diberi nomor 1 sampai 52 atau 53.
- Angka minggu ditulis dengan huruf besar
W
, sepertiW23
.
Tahun boleh didahului,2015-W23
. - Minggu #1,
W01
, berisi hari Kamis pertama tahun ini.
Sejauh yang saya tahu, definisi standar ini semakin umum digunakan di berbagai negara dan industri.
Minggu Minggu
dokumen MongoDB mendefinisikan minggu sebagai:
Sejauh yang saya tahu, ini adalah definisi sebagian besar Amerika, tidak banyak digunakan di luar AS.
Mengapa definisi itu mengatakan 0 hingga 53? Itu berarti "hingga 54 minggu". Saya tidak berpikir definisi ini akan menghasilkan 54 minggu dalam satu tahun, tetapi saya belum memikirkannya.
Mengapa Mencampur?
Anda tidak dapat benar-benar mencampur dua definisi. Kenapa mengganggu? Jika tujuan Anda adalah menggunakan definisi minggu MongoDB, dan mewakilinya dengan tanggal-waktu, maka tulis konverter Anda sendiri.
Saran saya sendiri adalah membuang definisi dan fungsi MongoDB, dan tetap menggunakan definisi standar.
Cari Minggu
Jika Anda ingin menemukan hari Minggu memulai minggu di dunia MongoDB, tulis fungsi kecil Anda sendiri. Beri makan di nomor tahun dan nomor minggu, dan dapatkan kembali DateTime. Dalam skenario ini, Anda tidak memerlukan fitur mingguan Joda-Time.
Sesuatu seperti ini.
int yearNumber = 2015;
int weekNumber = 0;
LocalDate firstWeekSunday = null;
LocalDate firstOfYear = new LocalDate ( yearNumber, 1, 1 );
if ( firstOfYear.getDayOfWeek ( ) == DateTimeConstants.SUNDAY ) {
firstWeekSunday = firstOfYear;
} else { // ELSE not Sunday.
firstWeekSunday = firstOfYear.minusDays ( firstOfYear.getDayOfWeek ( ) ); // Joda-Time uses standard ISO 8601 weeks, where Monday = 1, Sunday = 7.
}
LocalDate sunday = firstWeekSunday.plusWeeks ( weekNumber );
DateTimeZone zone = DateTimeZone.forID ( "America/Montreal" );
DateTime dateTime = sunday.toDateTimeAtStartOfDay ( zone );
Buang ke konsol.
System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );
Saat dijalankan.
Sunday-based week of year:2015 week: 0 starts: 2014-12-28.
Adjusted to time zone: America/Montreal is: 2014-12-28T00:00:00.000-05:00.