📄 datetime.cpp
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================//// Author: Mike Brasher (mbrasher@bmc.com)//// Modified By: Sushma Fernandes, Hewlett-Packard Company// (sushma_fernandes@hp.com)// Carol Ann Krug Graves, Hewlett-Packard Company// (carolann_graves@hp.com)// Willis White (PEP 192)// Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)////%/////////////////////////////////////////////////////////////////////////////#include <Pegasus/Common/PegasusAssert.h>#include <Pegasus/Common/CIMDateTime.h>#include <Pegasus/Common/XmlWriter.h>#include <Pegasus/Common/Exception.h>PEGASUS_USING_PEGASUS;PEGASUS_USING_STD;void put(const char *msg, const CIMDateTime & x){ cout << msg << "[" << x.toString() << ":" << CIMValue(x.toMicroSeconds()).toString() << "]"; cout << endl;}int main(int argc, char **argv){ Boolean bad = false; try { // ATTN-P2-KS 20 Mar 2002 - Needs expansion of tests. // get the output display flag. Boolean verbose = (getenv("PEGASUS_TEST_VERBOSE")) ? true : false; CIMDateTime dt; dt.set("19991224120000.000000+360"); dt.clear(); PEGASUS_TEST_ASSERT(dt.equal(CIMDateTime("00000000000000.000000:000"))); { bad = false; try { dt.set("too short"); } catch(InvalidDateTimeFormatException &) { bad = true; } PEGASUS_TEST_ASSERT(bad); } { Boolean bad = false; try { dt.set("too short"); dt.set("19990132120000.000000+360"); } catch(InvalidDateTimeFormatException &) { bad = true; } PEGASUS_TEST_ASSERT(bad); } if (verbose) cout << dt << endl; CIMDateTime dt1; dt1 = dt; /**************************************************************** testing function added in PEP 192 *******************************************************************/ Boolean te1 = false; CIMDateTime te; try { te.set("2000122412****.002000+360"); // this is not leagal } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); te1 = false; String stri = "20001224122***.******+360"; try { CIMDateTime st(stri); } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); te1 = false; /* makes sure the fields has splats starting form least significant place and going up */ String str_test2 = "20001224120000.002*00+360"; try { CIMDateTime cdt_test2(str_test2); } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); te1 = false; try { CIMDateTime stt("200012*4120000.002000+360"); } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); te1 = false; /* check for UTC */ String str_test1 = "20001012010920.002000+3*0"; try { CIMDateTime cdt_test1(str_test1); } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); /* check days and UTC field when object is an interval */ String str_test3 = "20001012010920.002000:000"; try { CIMDateTime cdt_test3(str_test3); } catch(const InvalidDateTimeFormatException &) { te1 = false; } PEGASUS_TEST_ASSERT(te1); te1 = false; String str_test4 = "20001012010920.002000:100"; try { CIMDateTime cdt_test4(str_test4); } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); te1 = false; // Check for invalid non-ASCII character try { String str = "20001012010920.002000:000"; str[7] = Char16(0x0132); CIMDateTime cdt(str); } catch(const InvalidDateTimeFormatException &) { te1 = true; } PEGASUS_TEST_ASSERT(te1); te1 = false; // verify CIMDateTime::CIMDateTime(const Uint64 microSec, Boolean) // and toMicroSeconds() try { Uint64 co = 1; while (co < 20) { Uint64 num_day = PEGASUS_UINT64_LITERAL(86400000000) * co; CIMDateTime cdt1(num_day, true); PEGASUS_TEST_ASSERT(cdt1.toMicroSeconds() == PEGASUS_UINT64_LITERAL(86400000000) * co); co = co + 2; } } catch(...) { PEGASUS_TEST_ASSERT(false); } { CIMDateTime cdt("00010101000000.000000+000"); Uint64 us = cdt.toMicroSeconds(); PEGASUS_TEST_ASSERT(us == (Uint64) 366 * 24 * 60 * 60 * 1000000); } { CIMDateTime cdt("00000001000000.123456:000"); Uint64 us = cdt.toMicroSeconds(); PEGASUS_TEST_ASSERT(us == PEGASUS_UINT64_LITERAL(86400123456)); } { CIMDateTime cdt("00000101000000.123456+000"); Uint64 us = cdt.toMicroSeconds(); PEGASUS_TEST_ASSERT(us == PEGASUS_UINT64_LITERAL(123456)); } { CIMDateTime cdt("00000000030000.123456:000"); Uint64 us = cdt.toMicroSeconds(); PEGASUS_TEST_ASSERT(us == (Uint64) 3 * 60 * 60 * 1000000 + 123456); } /* CIMDateTime con1(864003660000000,false); //CIMDateTime con_comp("00270519010100.000000+000"); //if (!con1.equal(con_comp)) { PEGASUS_TEST_ASSERT(false); } const Uint64 conr1 = con1.toMicroSeconds(); if (conr1 != 864003660000000) { PEGASUS_TEST_ASSERT(false); } */ { Uint64 n = PEGASUS_UINT64_LITERAL(8640000000000000); PEGASUS_TEST_ASSERT(n == CIMDateTime(n, false).toMicroSeconds()); } { Uint64 n = PEGASUS_UINT64_LITERAL(8637408000000000); PEGASUS_TEST_ASSERT(n == CIMDateTime(n, false).toMicroSeconds()); } CIMDateTime date1("20041014002133.123456+000"); Uint64 mic1 = date1.toMicroSeconds(); CIMDateTime result1(mic1, false); if (!date1.equal(result1)) { cout << result1. toString() << " was returned for constructor and should equal " << date1.toString() << endl; PEGASUS_TEST_ASSERT(false); } CIMDateTime date2("20000714000233.123456+000"); Uint64 mic2 = date2.toMicroSeconds(); CIMDateTime result2(mic2, false); if (!date2.equal(result2)) { cout << result2. toString() << " was returned for constructor and should equal " << date2.toString() << endl; PEGASUS_TEST_ASSERT(false); } CIMDateTime date3("90001014100000.000456+000"); Uint64 mic3 = date3.toMicroSeconds(); CIMDateTime result3(mic3, false); if (!date3.equal(result3)) { cout << result3. toString() << " was returned for constructor and should equal " << date3.toString() << endl; PEGASUS_TEST_ASSERT(false); } CIMDateTime date4("01234567123456.123456:000"); Uint64 mic4 = date4.toMicroSeconds(); CIMDateTime result4(mic4, true); if (!date4.equal(result4)) { cout << result4. toString() << " was returned for constructor and should equal " << date4.toString() << endl; PEGASUS_TEST_ASSERT(false); } CIMDateTime date5("81234567123456.123456:000"); Uint64 mic5 = date5.toMicroSeconds(); CIMDateTime result5(mic5, true); if (!date5.equal(result5)) { cout << result5. toString() << " was returned for constructor and should equal " << date5.toString() << endl; PEGASUS_TEST_ASSERT(false); } CIMDateTime date6("00000000123456.123456:000"); Uint64 mic6 = date6.toMicroSeconds(); CIMDateTime result6(mic6, true); if (!date6.equal(result6)) { cout << result6. toString() << " was returned for constructor and should equal " << date6.toString() << endl; PEGASUS_TEST_ASSERT(false); } // Test overflow on timestamp construction from microseconds { CIMDateTime dt("99991231235959.999999-000"); Uint64 microseconds = dt.toMicroSeconds(); Boolean gotException = false; try { CIMDateTime x(microseconds + 1, false); } catch(const DateTimeOutOfRangeException &) { gotException = true; } PEGASUS_TEST_ASSERT(gotException); } // Test overflow on timestamp construction from microseconds from UTC { Boolean gotException = false; try { CIMDateTime dt("99991231235959.999999-001"); CIMDateTime x(dt.toMicroSeconds(), false); } catch(const DateTimeOutOfRangeException &) { gotException = true; } PEGASUS_TEST_ASSERT(gotException); } // Test overflow on interval construction from microseconds { CIMDateTime dt("99999999235959.999999:000"); Uint64 microseconds = dt.toMicroSeconds(); Boolean gotException = false; try { CIMDateTime x(microseconds + 1, true); } catch(const DateTimeOutOfRangeException &) { gotException = true; } PEGASUS_TEST_ASSERT(gotException); } // Test overflow on timestamp construction from large, valid interval { CIMDateTime dt("99999999235959.999999:000"); Uint64 microseconds = dt.toMicroSeconds(); Boolean gotException = false; try { CIMDateTime x(microseconds, false); } catch(const DateTimeOutOfRangeException &) { gotException = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -