मैं अपनी परियोजना में Boost's datetime library का उपयोग कर रहा हूं। मैं बहुत खुश था जब मुझे पता चला कि इसमें घंटों, दिन, महीनों, वर्षों आदि के लिए समय अवधि का प्रकार है, और वे जो भी आप उन्हें जोड़ रहे हैं उसके आधार पर अपना मूल्य बदलते हैं (यानी तिथि के महीने के महीने में 1 महीने की प्रगति जोड़ना , यह सिर्फ 30 दिन या somesuch नहीं जोड़ता है)। मैं इस संपत्ति दिनों प्रकार के लिए आयोजित सोचा, लेकिन मैं इससे पहले कि मैं यह उत्पादन में डाल दिया यह परीक्षण करने का फैसला ...स्थानीय_डेट_टाइम गणित को बढ़ावा देता है?
local_date_time t1(date(2010, 3, 14), hours(1), easternTime, false); // 1am on DST transition date
{
CPPUNIT_ASSERT_EQUAL(greg_year(2010), t1.local_time().date().year());
CPPUNIT_ASSERT_EQUAL(greg_month(3), t1.local_time().date().month());
CPPUNIT_ASSERT_EQUAL(greg_day(14), t1.local_time().date().day());
CPPUNIT_ASSERT_EQUAL(1L, t1.local_time().time_of_day().hours());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().minutes());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().seconds());
}
t1 += days(1); // the time in EST should now be 1am on the 15th
{
CPPUNIT_ASSERT_EQUAL(greg_year(2010), t1.local_time().date().year());
CPPUNIT_ASSERT_EQUAL(greg_month(3), t1.local_time().date().month());
CPPUNIT_ASSERT_EQUAL(greg_day(15), t1.local_time().date().day());
CPPUNIT_ASSERT_EQUAL(1L, t1.local_time().time_of_day().hours()); // fails, returns 2
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().minutes());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().seconds());
}
से ऊपर तुम मेरे CppUnit इकाई परीक्षण देखेंगे। यह संकेत रेखा पर 2 के साथ विफल रहता है, जो कि मैं उम्मीद करता हूं कि अगर दिन() केवल 1 लॉजिकल दिन के बजाय 24 घंटे जोड़े जाते हैं (क्योंकि डीएसटी संक्रमण 2010-03-14 ईएसटी में 23 घंटे लंबा होता है)।
क्या मैं कुछ गलत कर रहा हूं? क्या यह एक बग है? क्या मैंने इस तरह के गणित के संबंध में लाइब्रेरी के डिजाइन लक्ष्य को पूरी तरह गलत समझा? posix_time :: TIME_DURATION टीडी (24, 0 बढ़ावा :::
यह एक महान उदाहरण है कि हमें सभी टेस्ट हार्नेस कोड क्यों लिखना चाहिए - वास्तविकता – slf