ปฏิทินผิดเวลาหลังจากเปลี่ยนเขตเวลา

ฉันต้องการวันที่ 5 เดือนที่แล้วจากปัจจุบันด้วยวันแรกของเดือน ฉันใช้รหัสนี้เพื่อทำ:

val date = Calendar.getInstance()
date.add(Calendar.MONTH, -5)
date.set(Calendar.DAY_OF_MONTH, 1)
date.set(Calendar.HOUR_OF_DAY, 0)
date.set(Calendar.MINUTE, 0)
date.set(Calendar.SECOND, 0)

ปกติแล้วจะทำงานได้ดี โดยเริ่มจาก 2018-08-10T15:46:53+02:00 จำเป็น 2018-03-01T00:00:00+01:00

แต่หากฉันเปลี่ยนเขตเวลาเป็น GMT+7 ให้ดำเนินการแอปต่อและเรียกใช้โค้ดนี้ มันทำให้ฉันได้ผลลัพธ์แปลกๆ เมื่อสองสามวันก่อนที่จำเป็น: 2018-02-28T20:00:00+01:00

หากฉันลบแอปออกจากหน่วยความจำและเริ่มต้นใหม่อีกครั้งหลังจากเปลี่ยนเขตเวลา ทุกอย่างทำงานได้ดี


person Max Makeichik    schedule 10.08.2018    source แหล่งที่มา


คำตอบ (1)


ใช้ไลบรารี JodaTime จากนั้นโค้ดของคุณจะมีลักษณะดังนี้:

DateTime now = DateTime.now();
DateTime fiveMonthsAgo= now.minusMonths(5);

มิฉะนั้น คุณต้องลบปีด้วยตนเองเมื่อจำเป็น

person UgAr0FF    schedule 10.08.2018