जेनकींस के रात के निर्माण पर, हमारे परीक्षणों में से एक 2:00:12 बजे विफल रहा। कुछ समय बाद मेरे कंप्यूटर के सिस्टमटाइम को डीबगिंग और बदलना, मैं बहुत उलझन में था। तब मैंने निम्नलिखित परीक्षण (समस्या को अनुकरण) लिखा, जो विफल रहता है, लेकिन मैं समझने में असमर्थ हूं कि क्यों। मैंने Google की कोशिश की, लेकिन कुछ भी समान नहीं मिला।
क्या कोई समझा सकता है कि आखिरी जोर क्यों विफल रहता है?भ्रमित परीक्षण विफल - डेलाइट सेविंग टाइम
@Test
public void testFirstBeforeSecond_atDayLightSavingTime() throws ParseException {
Date first = new SimpleDateFormat("dd-MM-yyyy HH:mm").parse("25-10-2015 00:59");
Date second = new SimpleDateFormat("dd-MM-yyyy HH:mm").parse("25-10-2015 01:01");
assertThat(first.before(second), is(true)); // Ok, as expected
first = add(first, Calendar.HOUR_OF_DAY, 2);
second = add(second, Calendar.HOUR_OF_DAY, 2);
assertThat(first.before(second), is(true)); // Ok, as expected
first = add(first, Calendar.DAY_OF_YEAR, 2);
second = add(second, Calendar.DAY_OF_YEAR, 2);
assertThat(first.before(second), is(true)); // Fails?
}
private Date add(Date date, int field, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("Europe/Brussels"));
calendar.setTime(date);
calendar.add(field, amount);
return calendar.getTime();
}
आप कभी भी टाइमज़ोन को परिभाषित नहीं करते हैं! तो इस कोड को चलाने वाले किसी भी डिवाइस पर होस्ट सिस्टम की डिफ़ॉल्ट समय क्षेत्र सेटिंग का उपयोग करता है। आपका स्थानीय कंप्यूटर स्थानीय समय और सर्वरों में अक्सर यूटीसी में चल रहा है। क्या आपने इस बारे में सोचा है? –
संभवतः http://stackoverflow.com/questions/13611108/problems-with-java-daylight-savings-time – dkatzel
@ReneM से संबंधित है। टाइमज़ोन निजी विधि 'एड' में सेट किया गया है: 'calendar.setTimeZone (TimeZone.getTimeZone (" यूरोप/ब्रसेल्स "));' – Manu