version 1.2, 2001/03/23 20:19:20
|
version 1.38, 2004/05/05 19:43:41
|
|
|
//BEGIN_LICENSE |
//%2003//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM |
// 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. |
|
// |
|
// 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: Karl Schopmeyer(k.schopmeyer@opengroup.org) |
|
// Sushma Fernandes, Hewlett Packard Company |
|
// (sushma_fernandes@hp.com) |
|
// Roger Kumpf, Hewlett Packard Company (roger_kumpf@hp.com) |
|
// Carol Ann Krug Graves, Hewlett-Packard Company |
|
// (carolann_graves@hp.com) |
|
// Amit K Arora (amita@in.ibm.com) for PEP-101 |
// | // |
// 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 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. |
|
// |
|
//END_LICENSE |
|
//BEGIN_HISTORY |
|
// |
|
// Author: |
|
// |
|
// $Log$ |
|
// Revision 1.2 2001/03/23 20:19:20 mike |
|
// Reformatted documentation. Added a couple of ATTN's |
|
// |
|
// Revision 1.1 2001/02/18 18:39:06 mike |
|
// new |
|
// |
|
// Revision 1.2 2001/02/18 03:02:58 karl |
|
// comment cleanup |
|
// |
|
// Revision 1.1 2001/02/16 02:07:06 mike |
|
// Renamed many classes and headers (using new CIM prefixes). |
|
// |
|
// Revision 1.3 2001/02/06 17:04:03 karl |
|
// add documentation |
|
// |
|
// Revision 1.2 2001/01/24 13:54:09 karl |
|
// Add Doc++ Document Comments |
|
// |
|
// Revision 1.1.1.1 2001/01/14 19:50:41 mike |
|
// Pegasus import |
|
// |
|
// |
|
//END_HISTORY |
|
| |
#ifndef Pegasus_DateTime_h | #ifndef Pegasus_DateTime_h |
#define Pegasus_DateTime_h | #define Pegasus_DateTime_h |
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <iostream> |
#include <Pegasus/Common/Array.h> |
|
#include <Pegasus/Common/Linkage.h> |
|
#include <Pegasus/Common/AutoPtr.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
class CIMDateTimeRep |
|
{ |
|
public: |
|
enum { FORMAT_LENGTH = 25 }; |
|
|
|
// |
|
// Length of the string required to store only the date and time without |
|
// the UTC sign and UTC offset. |
|
// Format is yyyymmddhhmmss. |
|
// Note : The size does not include the null byte. |
|
// |
|
enum { DATE_TIME_LENGTH = 14 }; |
|
|
|
// |
|
// Length of the string required to store the formatted date and time |
|
// Format is yyyy:mm:dd:hh:mm:ss. |
|
// |
|
enum { FORMATTED_DATE_TIME = 20 }; |
|
|
|
char data[FORMAT_LENGTH + 1]; |
|
}; |
|
|
|
|
/** | /** |
The CIMDateTime class represents the CIM datetime data type as a C++ class | The CIMDateTime class represents the CIM datetime data type as a C++ class |
CIMDateTime. A CIM datetime may contain a date or an interval. CIMDateTime | CIMDateTime. A CIM datetime may contain a date or an interval. CIMDateTime |
is an intrinsic CIM data type which represents the time as a formated |
is an intrinsic CIM data type that represents the time as a string with a |
fixedplength string. |
fixed length. |
| |
<PRE> | <PRE> |
A date has the following form: | A date has the following form: |
|
|
| |
Where | Where |
| |
yyyy = year (0-1999) |
yyyy = year (1-9999) |
mm = month (1-12) | mm = month (1-12) |
dd = day (1-31) | dd = day (1-31) |
hh = hour (0-23) | hh = hour (0-23) |
mm = minute (0-59) | mm = minute (0-59) |
ss = second (0-59) | ss = second (0-59) |
mmmmmm = microseconds. |
mmmmmm = microseconds |
s = '+' or '-' to represent the UTC sign. |
s = '+' or '-' to represent the Coordinated Universal Time (UTC) sign |
utc = UTC offset (same as GMT offset). |
utc = offset from Coordinated Universal Time (UTC) |
|
(same as Greenwich Mean Time(GMT) offset) |
| |
An interval has the following form: | An interval has the following form: |
| |
|
|
Where | Where |
| |
dddddddd = days | dddddddd = days |
hh = hours |
hh = hours (0-23) |
mm = minutes |
mm = minutes (0-59) |
ss = seconds |
ss = seconds (0-59) |
mmmmmm = microseconds | mmmmmm = microseconds |
</PRE> | </PRE> |
| |
Note that intervals always end in ":000" (this is how they |
Note: Intervals always end in ":000". This distinguishes intervals from dates. |
are distinguished from dates). |
|
| |
Intervals are really durations since they do not specify a start and |
CIMDateTime objects are constructed from String objects or from |
end time (as one expects when speaking about an interval). It is |
other CIMDateTime objects. Character strings must be exactly |
better to think of an interval as specifying time elapsed since |
twenty-five characters in length and conform to either the date or interval |
some event. |
format. |
|
|
CIMDateTime objects are constructed from C character strings or from |
|
other CIMDateTime objects. These character strings must be exactly |
|
twenty-five characters and conform to one of the forms idententified |
|
above. |
|
| |
CIMDateTime objects which are not explicitly initialized will be |
CIMDateTime objects that are not explicitly initialized will be |
implicitly initialized with the null time interval: |
implicitly initialized with a zero time interval: |
| |
00000000000000.000000:000 | 00000000000000.000000:000 |
| |
Instances can be tested for nullness with the isNull() method. |
|
|
|
ATTN: Add inequalities. |
|
*/ | */ |
class PEGASUS_COMMON_LINKAGE CIMDateTime | class PEGASUS_COMMON_LINKAGE CIMDateTime |
{ | { |
public: | public: |
| |
enum { FORMAT_LENGTH = 25 }; |
/** Creates a new CIMDateTime object with a zero interval value. |
|
*/ |
/// CIMDateTime CIMMethod |
|
CIMDateTime(); | CIMDateTime(); |
| |
/** CIMDateTime CIMMethod creates the CIM CIMDateTime from a string |
/** Creates a new CIMDateTime object from a string constant representing |
constant. |
the CIM DateTime-formatted datetime. |
|
See the class documentation for CIMDateTime for the definition of the |
|
input string for absolute and interval datetime. |
|
@param str String object containing the CIM DateTime-formatted string. |
|
This must contain twenty-five characters. |
*/ | */ |
CIMDateTime(const char* str); |
CIMDateTime(const String & str); |
| |
/** CIMDateTime CIMMethod - Creates the CIMDateTime instance from another |
/** Creates a CIMDateTime object from another CIMDateTime object. |
CIMDateTime instance |
@param x Specifies the name of the CIMDateTime object to copy. |
*/ | */ |
CIMDateTime(const CIMDateTime& x); | CIMDateTime(const CIMDateTime& x); |
| |
/** CIMDateTime method again |
|
*/ |
|
CIMDateTime& operator=(const CIMDateTime& x); |
|
| |
/** CIMDateTime isNull method - Tests for an all zero date time |
/** Assigns one instance of the CIMDateTime object to another. |
|
@param x The CIMDateTime Object to assign to the CIMDateTime object. |
|
For example, you can assign the d1 CIMDateTime instance to the d2 |
|
CIMDateTime instance. |
<PRE> | <PRE> |
CIMDateTime dt; |
CIMDateTime d1; |
dt.clear(); |
CIMDateTime d2 = "00000000000000.000000:000"; |
assert(dt.isNull()); |
d1 = d2; |
</PRE> | </PRE> |
@return This method returns true of the contents are |
Therefore, d1 is assigned the same "00000000000000.000000:000" value as d2. |
"00000000000000.000000:000". Else it returns false |
|
*/ | */ |
Boolean isNull() const; |
CIMDateTime& operator=(const CIMDateTime& x); |
|
|
/// method getString |
|
const char* getString() const; |
|
| |
/** method set - Sets the date time. Creates the CIMDateTime instance from |
/** Returns a string representing the DateTime value of the |
the input string constant which must be |
CIMDateTime object. |
in the datetime format. |
@return String representing the DateTime value. |
|
*/ |
|
String toString () const; |
|
|
|
/** Sets the date and time in the CIMDateTime object from |
|
the input parameter. |
|
@param str String constant containing the datetime |
|
in the datetime format. This must conform the to formatting rules specified |
|
in the CIMDateTime class description. For example, the following sets |
|
the date to December 24, 1999 and time to 12:00 P.M. |
| |
<PRE> | <PRE> |
CIMDateTime dt; | CIMDateTime dt; |
dt.set("19991224120000.000000+360"); | dt.set("19991224120000.000000+360"); |
</PRE> | </PRE> |
| |
@return On format error, CIMDateTime set throws the exception |
@exception InvalidDateTimeFormatException because the date and time is not |
BadDateTimeFormat |
formatted correctly. See the CIMDateTime class decscription for the |
@exception Throws exception BadDateTimeFormat on format error. |
formatting rules. |
*/ | */ |
void set(const char* str); |
void set(const String & str); |
| |
/// CIMDateTime method clear - Clears the datetime class instance. |
/** Clears the datetime class object. The date time is set to |
|
a zero interval value. |
|
*/ |
void clear(); | void clear(); |
| |
/** CIMDateTime CIMMethod - ATTN: Friend operator Test for CIMDateTime |
/** Receives the current time as CIMDateTime. The time is returned as the local time. |
equality |
@return CIMDateTime object containing the current date and time. |
*/ | */ |
PEGASUS_COMMON_LINKAGE friend Boolean operator==( |
static CIMDateTime getCurrentDateTime(); |
const CIMDateTime& x, |
|
const CIMDateTime& y); |
/** Computes the difference in microseconds between two CIMDateTime dates or |
|
two CIMDateTime intervals. |
|
@param startTime Contains the start datetime. |
|
@param finishTime Contains the finish datetime. |
|
@return Integer that contains the difference between the two datetime values |
|
in microseconds. |
|
@exception InvalidDateTimeFormatException If one argument uses the interval |
|
format and the other uses the string format. |
|
@exception DateTimeOutOfRangeException If datetime is outside the allowed |
|
range. |
|
|
|
Note: The behavior on HP-UX and Windows platform is to throw an exception |
|
when the dates are out of range. Red Hat Linux platform normalizes the |
|
dates when they are outside their legal interval and will not throw an |
|
exception. |
|
|
|
Allowed Date Range: |
|
The mktime (3C) man page on HP-UX does not document the allowed range. |
|
The approximate range of dates allowed on HP-UX is between |
|
1901 and 2038. |
|
|
|
On Windows platform, the approximate range is between 1970 to 2038. |
|
|
|
On Red Hat Linux platform the approximate range is between 1901 and 2038. |
|
*/ |
|
static Sint64 getDifference(CIMDateTime startTime, CIMDateTime finishTime); |
|
|
|
/** Checks whether the datetime is an interval. |
|
@return True if the datetime is an interval; otherwise, false. |
|
*/ |
|
Boolean isInterval(); |
|
|
|
/** Compares the CIMDateTime object to another CIMDateTime object for |
|
equality. |
|
@param x CIMDateTime object to be compared. |
|
@return true if the two CIMDateTime objects are equal; otherwise, false. |
|
*/ |
|
Boolean equal (const CIMDateTime & x) const; |
| |
private: | private: |
| |
Boolean _set(const char* str); |
AutoPtr<CIMDateTimeRep> _rep;//PEP101 |
char _rep[FORMAT_LENGTH + 1]; |
Boolean _set(const String & dateTimeStr); |
}; | }; |
|
/** |
|
Add documentation here. |
|
*/ |
PEGASUS_COMMON_LINKAGE Boolean operator==( | PEGASUS_COMMON_LINKAGE Boolean operator==( |
|
/** |
|
Add documentation here. |
|
*/ |
const CIMDateTime& x, | const CIMDateTime& x, |
|
/** |
|
Add documentation here. |
|
*/ |
const CIMDateTime& y); | const CIMDateTime& y); |
| |
PEGASUS_COMMON_LINKAGE std::ostream& operator<<( |
#define PEGASUS_ARRAY_T CIMDateTime |
std::ostream& os, |
# include <Pegasus/Common/ArrayInter.h> |
const CIMDateTime& x); |
#undef PEGASUS_ARRAY_T |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |