242 lines
9.4 KiB
C
242 lines
9.4 KiB
C
|
/*
|
||
|
*
|
||
|
* Copyright (C) 2002-2011, OFFIS e.V.
|
||
|
* All rights reserved. See COPYRIGHT file for details.
|
||
|
*
|
||
|
* This software and supporting documentation were developed by
|
||
|
*
|
||
|
* OFFIS e.V.
|
||
|
* R&D Division Health
|
||
|
* Escherweg 2
|
||
|
* D-26121 Oldenburg, Germany
|
||
|
*
|
||
|
*
|
||
|
* Module: ofstd
|
||
|
*
|
||
|
* Author: Joerg Riesmeier
|
||
|
*
|
||
|
* Purpose: Combined class for date and time functions
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef OFDATIME_H
|
||
|
#define OFDATIME_H
|
||
|
|
||
|
#include "dcmtk/config/osconfig.h"
|
||
|
|
||
|
#include "dcmtk/ofstd/ofstring.h" /* for class OFString */
|
||
|
#include "dcmtk/ofstd/ofdate.h" /* for class OFDate */
|
||
|
#include "dcmtk/ofstd/oftime.h" /* for class OFTime */
|
||
|
|
||
|
|
||
|
/*---------------------*
|
||
|
* class declaration *
|
||
|
*---------------------*/
|
||
|
|
||
|
/** This class is a combination of OFDate and OFTime
|
||
|
*/
|
||
|
class DCMTK_OFSTD_EXPORT OFDateTime
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
|
||
|
/** default constructor.
|
||
|
* Initializes Date and Time to 0.
|
||
|
*/
|
||
|
OFDateTime();
|
||
|
|
||
|
/** copy constructor
|
||
|
* @param dateTime date/time object to be copied
|
||
|
*/
|
||
|
OFDateTime(const OFDateTime &dateTime);
|
||
|
|
||
|
/** copy constructor
|
||
|
* @param dateVal date object to be copied
|
||
|
* @param timeVal time object to be copied
|
||
|
*/
|
||
|
OFDateTime(const OFDate &dateVal,
|
||
|
const OFTime &timeVal);
|
||
|
|
||
|
/** constructor
|
||
|
* @param year year value to be set
|
||
|
* @param month month value to be set
|
||
|
* @param day new value to be set
|
||
|
* @param hour hour value to be set
|
||
|
* @param minute minute value to be set
|
||
|
* @param second second value to be set (incl. fraction of seconds)
|
||
|
* @param timeZone optional offset to Coordinated Universal Time (UTC) in hours
|
||
|
*/
|
||
|
OFDateTime(const unsigned int year,
|
||
|
const unsigned int month,
|
||
|
const unsigned int day,
|
||
|
const unsigned int hour,
|
||
|
const unsigned int minute,
|
||
|
const double second,
|
||
|
const double timeZone = 0);
|
||
|
|
||
|
/** destructor
|
||
|
*/
|
||
|
virtual ~OFDateTime();
|
||
|
|
||
|
/** assignment operator
|
||
|
* @param dateTime date/time value to be set
|
||
|
* @return reference to this object (with new value)
|
||
|
*/
|
||
|
virtual OFDateTime &operator=(const OFDateTime &dateTime);
|
||
|
|
||
|
/** comparison operator (equal).
|
||
|
* Please note that the time values are first transformed to the Coordinated Universal
|
||
|
* Time (UTC) before they are compared. However, the special case that there is an
|
||
|
* "overflow" from one day to another is currently not handled.
|
||
|
* @param dateTime date and time value compared with the current value
|
||
|
* @return OFTrue if given date and time is equal, OFFalse otherwise
|
||
|
*/
|
||
|
virtual OFBool operator==(const OFDateTime &dateTime) const;
|
||
|
|
||
|
/** comparison operator (unequal)
|
||
|
* Please note that the time values are first transformed to the Coordinated Universal
|
||
|
* Time (UTC) before they are compared. However, the special case that there is an
|
||
|
* "overflow" from one day to another is currently not handled.
|
||
|
* @param dateTime date and time value compared with the current value
|
||
|
* @return OFTrue if given date or time is unequal, OFFalse otherwise
|
||
|
*/
|
||
|
virtual OFBool operator!=(const OFDateTime &dateTime) const;
|
||
|
|
||
|
/** reset the date/time value.
|
||
|
* Sets all date and all time components to '0'. NB: Date becomes invalid.
|
||
|
*/
|
||
|
virtual void clear();
|
||
|
|
||
|
/** check whether the currently stored date and time value is valid.
|
||
|
* See classes OFDate and OFTime for details.
|
||
|
* @return OFTrue if the current value is valid, OFFalse otherwise
|
||
|
*/
|
||
|
virtual OFBool isValid() const;
|
||
|
|
||
|
/** set the date/time value.
|
||
|
* Before the new value is set it is checked using the "isValid()" routine.
|
||
|
* @param year new year value to be set
|
||
|
* @param month new month value to be set
|
||
|
* @param day new day value to be set
|
||
|
* @param hour new hour value to be set
|
||
|
* @param minute new minute value to be set
|
||
|
* @param second new second value to be set (incl. fraction of seconds)
|
||
|
* @param timeZone optional offset to Coordinated Universal Time (UTC) in hours
|
||
|
* @return OFTrue if the new value is valid and has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool setDateTime(const unsigned int year,
|
||
|
const unsigned int month,
|
||
|
const unsigned int day,
|
||
|
const unsigned int hour,
|
||
|
const unsigned int minute,
|
||
|
const double second,
|
||
|
const double timeZone = 0);
|
||
|
|
||
|
/** set the date component to the specified date.
|
||
|
* Before the new value is set it is checked using the "isValid()" routine.
|
||
|
* @param dateVal new date value to be set
|
||
|
* @return OFTrue if the new value is valid and has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool setDate(const OFDate &dateVal);
|
||
|
|
||
|
/** set the time component to the specified time.
|
||
|
* Before the new value is set it is checked using the "isValid()" routine.
|
||
|
* @param timeVal new time value to be set
|
||
|
* @return OFTrue if the new value is valid and has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool setTime(const OFTime &timeVal);
|
||
|
|
||
|
/** set the date and time component to the specified date/time.
|
||
|
* Before the new value is set it is checked using the "isValid()" routine.
|
||
|
* @param dateVal new date value to be set
|
||
|
* @param timeVal new time value to be set
|
||
|
* @return OFTrue if the new value is valid and has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool setDateTime(const OFDate &dateVal,
|
||
|
const OFTime &timeVal);
|
||
|
|
||
|
/** set the date and time value to the current system date and time.
|
||
|
* This function uses operating system dependent routines. If the date or time function
|
||
|
* (or both) are unavailable for some reason the corresponding value is not modified.
|
||
|
* @return OFTrue if the current system date and time has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool setCurrentDateTime();
|
||
|
|
||
|
/** set the date/time value to the given ISO formatted date/time string.
|
||
|
* The two ISO date/time formats supported by this function are
|
||
|
* - "YYYY-MM-DD HH:MM[:SS [&ZZ:ZZ]]" (with arbitrary delimiters) and
|
||
|
* - "YYYYMMDDHHMM[SS[&ZZZZ]]" (without delimiters, useful for DICOM datetime type)
|
||
|
* where the brackets enclose optional parts. Please note that the optional fractional
|
||
|
* part of a second ".FFFFFF" (see getISOFormattedDateTime()) is not yet supported.
|
||
|
* @param formattedDateTime ISO formatted date/time value to be set
|
||
|
* @return OFTrue if input is valid and result variable has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool setISOFormattedDateTime(const OFString &formattedDateTime);
|
||
|
|
||
|
/** get the current date component
|
||
|
* @return reference to date object
|
||
|
*/
|
||
|
const OFDate &getDate() const;
|
||
|
|
||
|
/** get the current time component
|
||
|
* @return reference to time object
|
||
|
*/
|
||
|
const OFTime &getTime() const;
|
||
|
|
||
|
/** get the current date/time value in ISO format.
|
||
|
* The two ISO time formats supported by this function are
|
||
|
* - "YYYY-MM-DD HH:MM[:SS[.FFFFFF]] [&ZZ:ZZ]" (with delimiters) and
|
||
|
* - "YYYYMMDDHHMM[SS[.FFFFFF]][&ZZZZ]" (without delimiters, useful for DICOM datetime type)
|
||
|
* where the brackets enclose optional parts.
|
||
|
* @param formattedDateTime reference to string variable where the result is stored
|
||
|
* @param showSeconds add optional seconds (":SS" or "SS") to the resulting string if OFTrue
|
||
|
* @param showFraction add optional fractional part of a second (".FFFFFF") if OFTrue.
|
||
|
* Requires parameter 'seconds' to be also OFTrue.
|
||
|
* @param showTimeZone add optional time zone ("&ZZ:ZZ" or "&ZZZZ") to the resulting string
|
||
|
* if OFTrue. The time zone indicates the offset from the Coordinated Universal Time (UTC)
|
||
|
* in hours and minutes. The "&" is a placeholder for the sign symbol ("+" or "-").
|
||
|
* @param showDelimiter flag, indicating whether to use delimiters ("-", ":" and " ") or not
|
||
|
* @param dateTimeSeparator separator between ISO date and time value. Only used if
|
||
|
* 'showDelimiter' is true.
|
||
|
* @param timeZoneSeparator separator between ISO time value and time zone. Only used if
|
||
|
* 'showDelimiter' is true.
|
||
|
* @return OFTrue if result variable has been set, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool getISOFormattedDateTime(OFString &formattedDateTime,
|
||
|
const OFBool showSeconds = OFTrue,
|
||
|
const OFBool showFraction = OFFalse,
|
||
|
const OFBool showTimeZone = OFFalse,
|
||
|
const OFBool showDelimiter = OFTrue,
|
||
|
const OFString &dateTimeSeparator = " ",
|
||
|
const OFString &timeZoneSeparator = " ") const;
|
||
|
|
||
|
/* --- static helper functions --- */
|
||
|
|
||
|
/** get the current system date and time
|
||
|
* @return date/time object with the current system date and time set
|
||
|
*/
|
||
|
static OFDateTime getCurrentDateTime();
|
||
|
|
||
|
|
||
|
private:
|
||
|
|
||
|
/// currently stored date value
|
||
|
OFDate Date;
|
||
|
|
||
|
/// currently stored time value
|
||
|
OFTime Time;
|
||
|
};
|
||
|
|
||
|
|
||
|
/** put the given date/time in ISO format on the output stream.
|
||
|
* If an error occurs nothing is printed.
|
||
|
* @param stream output stream
|
||
|
* @param time OFDateTime object to print
|
||
|
* @return reference to the output stream
|
||
|
*/
|
||
|
DCMTK_OFSTD_EXPORT STD_NAMESPACE ostream& operator<<(STD_NAMESPACE ostream& stream, const OFDateTime &dateTime);
|
||
|
|
||
|
|
||
|
#endif
|