⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datetime.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//%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 + -