version 1.12, 2002/02/18 13:58:02
|
version 1.33, 2002/10/30 18:51:31
|
|
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM, |
|
// The Open Group, Tivoli Systems |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// Author: Mike Brasher (mbrasher@bmc.com) | // Author: Mike Brasher (mbrasher@bmc.com) |
// | // |
// Modified By: Karl Schopmeyer(k.schopmeyer@opengroup.org) | // 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) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/Array.h> | #include <Pegasus/Common/Array.h> |
#include <iostream> |
#include <Pegasus/Common/Linkage.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
/* ATTN: P3. Several functions should be added to this class for datetime manipulation |
/* ATTN: P3. KS Several functions should be added to this class for datetime manipulation |
including get and set each subcomponent (year, month, etc). isInterval, test for equality, |
including get and set each subcomponent (year, month, etc), test for equality, |
create intervals from absolutes, possibly gett current time, Note that | create intervals from absolutes, possibly gett current time, Note that |
the Java rep is probably tostring, not get string, | the Java rep is probably tostring, not get string, |
*/ | */ |
| |
|
class CIMDateTimeRep; |
|
|
/** | /** |
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 which represents the time as a formatted |
fixedplength string. |
fixed length string. |
| |
<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 UTC sign |
utc = UTC offset (same as GMT offset). |
utc = UTC offset (same as 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> |
| |
|
|
better to think of an interval as specifying time elapsed since | better to think of an interval as specifying time elapsed since |
some event. | some event. |
| |
CIMDateTime objects are constructed from C character strings or from |
CIMDateTime objects are constructed from String objects or from |
other CIMDateTime objects. These character strings must be exactly | other CIMDateTime objects. These character strings must be exactly |
twenty-five characters and conform to one of the forms idententified |
twenty-five characters and conform to one of the forms identified |
above. | 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. |
|
*/ | */ |
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 |
|
|
/** Create a new CIMDateTime object with NULL DateTime definition. |
|
*/ | */ |
CIMDateTime(); | CIMDateTime(); |
| |
/** CIMDateTime - Creat a CIM CIMDateTime instance from a string |
/** CIMDateTime - Creates a CIM CIMDateTime instance from a string |
constant representing the CIM DateTime formatted datetime |
constant representing the CIM DateTime-formatted datetime |
See the class documentation for CIMDateTime for the defintion of the |
See the class documentation for CIMDateTime for the definition of the |
input string for absolute and interval datetime. | input string for absolute and interval datetime. |
@param str String object containing the CIM DateTime formatted string |
@param str String object containing the CIM DateTime-formatted string |
*/ | */ |
CIMDateTime(const char* str); |
CIMDateTime(const String & str); |
| |
/** CIMDateTime Create a CIMDateTime instance from another | /** CIMDateTime Create a CIMDateTime instance from another |
CIMDateTime object | CIMDateTime object |
|
|
CIMDateTime(const CIMDateTime& x); | CIMDateTime(const CIMDateTime& x); |
| |
/** DateTime Destructor. */ | /** DateTime Destructor. */ |
~CIMDateTime() { } |
~CIMDateTime(); |
| |
/** Assign one DateTime object to another | /** Assign one DateTime object to another |
@param - The DateTime Object to assign | @param - The DateTime Object to assign |
|
|
*/ | */ |
CIMDateTime& operator=(const CIMDateTime& x); | CIMDateTime& operator=(const CIMDateTime& x); |
| |
/** CIMDateTime isNull method - Tests for an all zero date time. Note that |
/** toString - Returns the string representing the DateTime value of the |
today this function checks for absolute datetime == zero, not interval. |
|
<PRE> |
|
CIMDateTime dt; |
|
dt.clear(); |
|
assert(dt.isNull()); |
|
</PRE> |
|
@return This method returns true of the contents are |
|
"00000000000000.000000:000". Else it returns false |
|
*/ |
|
Boolean isNull() const; |
|
|
|
/** getString - Returns the string representing the DateTime value of the |
|
CIMDateTime Object. | CIMDateTime Object. |
ATTN: P3 KS. This simply returns a string whether the datetime is a |
|
real value or the NULL value. It is up to the user to test. Should |
|
this be modified so we do something like an interupt on NULL? |
|
*/ | */ |
const char* getString() const; |
String toString () const; |
| |
/** method set - Sets the date time. Creates the CIMDateTime instance from | /** method set - Sets the date time. Creates the CIMDateTime instance from |
the input string constant which must be | the input string constant which must be |
|
|
dt.set("19991224120000.000000+360"); | dt.set("19991224120000.000000+360"); |
</PRE> | </PRE> |
| |
@return On format error, CIMDateTime set throws the exception |
@exception InvalidDateTimeFormatException on format error. |
BadDateTimeFormat |
|
@exception Throws exception BadDateTimeFormat on format error. |
|
*/ | */ |
void set(const char* str); |
void set(const String & str); |
| |
/** clear - Clears the datetime class instance. The date time is set to our |
/** clear - Clears the datetime class instance. The date time is set to |
defintion of NULL, absolute zero date time. |
a zero interval value. |
*/ | */ |
void clear(); | void clear(); |
| |
/** CIMDateTime - ATTN: Friend operator Test for CIMDateTime |
/** |
equality |
Get current time as CIMDateTime. The time returned is the local time. |
|
|
|
@return CIMDateTime Contains the current datetime as a CIMDateTime object. |
*/ | */ |
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 difference Difference between the two datetimes in microseconds |
|
|
|
@exception InvalidDateTimeFormatException If one argument is a datetime |
|
and one is an interval |
|
|
|
@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 the approximate range of dates allowed are within the |
|
range of 1901 and 2038. |
|
*/ |
|
static Sint64 getDifference(CIMDateTime startTime, CIMDateTime finishTime); |
|
|
|
/** |
|
Checks whether the datetime is an interval. |
|
|
|
@return isInterval True if the datetime is an interval, else false |
|
*/ |
|
Boolean isInterval(); |
|
|
|
/** |
|
Compares the CIMDateTime object to another CIMDateTime object for equality |
|
|
|
@return True if the two CIMDateTime objects are equal, |
|
False otherwise |
|
*/ |
|
Boolean equal (const CIMDateTime & x) const; |
| |
private: | private: |
| |
Boolean _set(const char* str); |
CIMDateTimeRep* _rep; |
char _rep[FORMAT_LENGTH + 1]; |
|
|
Boolean _set(const String & dateTimeStr); |
}; | }; |
| |
PEGASUS_COMMON_LINKAGE Boolean operator==( | PEGASUS_COMMON_LINKAGE Boolean operator==( |
const CIMDateTime& x, | const CIMDateTime& x, |
const CIMDateTime& y); | const CIMDateTime& y); |
| |
PEGASUS_COMMON_LINKAGE PEGASUS_STD(ostream)& operator<<( |
|
PEGASUS_STD(ostream)& os, |
|
const CIMDateTime& x); |
|
|
|
#define PEGASUS_ARRAY_T CIMDateTime | #define PEGASUS_ARRAY_T CIMDateTime |
# include "ArrayInter.h" |
# include <Pegasus/Common/ArrayInter.h> |
#undef PEGASUS_ARRAY_T | #undef PEGASUS_ARRAY_T |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |