You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
6.6 KiB
224 lines
6.6 KiB
// Copyright 2020 Siemens Digital Industries Software
|
|
// ==================================================
|
|
// Copyright 2015
|
|
// Siemens Product Lifecycle Management Software Inc.
|
|
// All Rights Reserved.
|
|
// ==================================================
|
|
// Copyright 2020 Siemens Digital Industries Software
|
|
|
|
#ifndef TEAMCENTER_DATETIME_HXX
|
|
#define TEAMCENTER_DATETIME_HXX
|
|
|
|
#include <string>
|
|
#include <ctime>
|
|
#include <unidefs.h>
|
|
#include <base_utils/libbase_utils_exports.h>
|
|
|
|
|
|
|
|
namespace Teamcenter
|
|
{
|
|
class DateTime;
|
|
}
|
|
|
|
|
|
class BASE_UTILS_API Teamcenter::DateTime
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* Returns an instance of the Null DateTime object.
|
|
* This is the client equivalent of the
|
|
* Teamcenter POM date_t constant returned by the function POM_null_date().
|
|
*/
|
|
static const DateTime getNullDate();
|
|
|
|
|
|
/**
|
|
* Default constructor creating an instance with the current date and time
|
|
*/
|
|
DateTime();
|
|
|
|
/**
|
|
* Construct a DateTime for the give time_t value (seconds elapsed since Jan 1, 1970, local time)
|
|
*
|
|
* @param time seconds elapsed since Jan 1, 1970
|
|
*/
|
|
DateTime( time_t time );
|
|
|
|
/**
|
|
* Copy constructor from another instance of DateTime.
|
|
|
|
* @param dateTime Existing DateTime value.
|
|
*/
|
|
DateTime(const DateTime& dateTime);
|
|
|
|
/**
|
|
* Copy constructor from instance of date_t (local time).
|
|
|
|
* @param aDatetype Existing date_t value.
|
|
*/
|
|
DateTime(const date_t& aDatetype);
|
|
|
|
/**
|
|
* Construct a date by parsing a string with the format yyyy-MM-ddThh:mm:ss zz:zz.
|
|
* <pre>
|
|
* 2005-05-20T14:32:05-08:00
|
|
* Where the -08:00 is minus 8 hours from GTM (Pacific Standard Time).
|
|
* The time-zone offset may exclude the ':'
|
|
* 2005-05-20T14:32:05-0800
|
|
*</pre>
|
|
* An empty string will construct a Null date (getNullDate()) instance.
|
|
*
|
|
* @param time String to parse (yyyy-MM-ddThh:mm:ss zz:zz).
|
|
*/
|
|
DateTime( const std::string& time );
|
|
|
|
|
|
/**
|
|
* Construct a date from the given local time input values.
|
|
*
|
|
* @param year yyyy
|
|
* @param month 1-12 (January = 1)
|
|
* @param day 1-31
|
|
* @param hour 0-23
|
|
* @param minutes 0-59
|
|
* @param seconds 0-59
|
|
*/
|
|
DateTime ( int year, int month, int day, int hour = 0, int minutes = 0, int seconds = 0 );
|
|
|
|
~DateTime(){};
|
|
|
|
|
|
/**
|
|
* Returns the date in a string with the format yyyy-MM-ddThh:mm:ss zz:zz
|
|
*
|
|
* @return The date as a string
|
|
*/
|
|
std::string toString( ) const;
|
|
|
|
/**
|
|
* Returns the date in a string with the given format.
|
|
*
|
|
* @param format Format string with codes defined by the strftime function
|
|
* ( i.e. %Y = year in decimal, with the century)
|
|
*
|
|
* @return The date as a string
|
|
*/
|
|
std::string toString( const std::string& format ) const;
|
|
|
|
/**
|
|
* Create a DateTime from a string with the format yyyy-MM-ddThh:mm:ss zz:zz.
|
|
* <pre>
|
|
* 2005-05-20T14:32:05-08:00
|
|
* Where the -08:00 is minus 8 hours from GTM (Pacific Standard Time).
|
|
* The time-zone offset may exclude the ':'
|
|
* 2005-05-20T14:32:05-0800
|
|
*</pre>
|
|
* An empty string will construct a Null date (getNullDate()) instance.
|
|
*
|
|
* @param time String to parse (yyyy-MM-ddThh:mm:ss zz:zz)
|
|
*/
|
|
DateTime convertStringToDate(const std::string& value);
|
|
|
|
/**
|
|
* Returns the date as seconds elapsed since Jan 1, 1970, local time.
|
|
* Any dates prior to 1970 will return a -1, this includes the NullDate.
|
|
*
|
|
* @return seconds elapsed since Jan 1, 1970, local time
|
|
*/
|
|
time_t toTime() const;
|
|
|
|
/**
|
|
* Returns the timezone offset of this date.
|
|
*
|
|
* @return offset from GMT (minutes)
|
|
*/
|
|
int timeZoneOffset() const;
|
|
|
|
/**
|
|
* @return The four digit year, local time
|
|
*/
|
|
int year () const {return m_dateTime.year;}
|
|
|
|
/**
|
|
* @return The month (1..12), local time
|
|
*/
|
|
int month () const {return m_dateTime.month + 1;}
|
|
/**
|
|
* @return The day (1..31), local time
|
|
*/
|
|
int day () const {return m_dateTime.day;}
|
|
/**
|
|
* @return The hour (0..23), local time
|
|
*/
|
|
int hour () const {return m_dateTime.hour;}
|
|
/**
|
|
* @return The minute (0..59), local time
|
|
*/
|
|
int minute() const {return m_dateTime.minute;}
|
|
/**
|
|
* @return The seconds (0..59), local time
|
|
*/
|
|
int second() const {return m_dateTime.second;}
|
|
|
|
int year (int y) {return (m_dateTime . year = static_cast<short>(y));}
|
|
int month (int m) {return (m_dateTime . month = static_cast<byte>(m -1)) + 1;}
|
|
int day (int d) {return (m_dateTime . day = static_cast<byte>(d));}
|
|
int hour (int h) {return (m_dateTime . hour = static_cast<byte>(h));}
|
|
int minute(int m) {return (m_dateTime . minute = static_cast<byte>(m));}
|
|
int second(int s) {return (m_dateTime . second = static_cast<byte>(s));}
|
|
|
|
/**
|
|
* @return A date_t struct (local time) representing the current DateTime.
|
|
*/
|
|
operator date_t() const { return (date_t)m_dateTime;}
|
|
|
|
bool operator ==(const DateTime& that) const;
|
|
bool operator !=(const DateTime& that) const {return !operator==(that);}
|
|
|
|
bool operator >(const DateTime& that) const;
|
|
bool operator <(const DateTime& that) const;
|
|
bool operator >=(const DateTime& that) const {return !operator<(that);}
|
|
bool operator <=(const DateTime& that) const {return !operator>(that);}
|
|
|
|
DateTime& operator =( const DateTime& that );
|
|
DateTime operator +( const DateTime& that ) const;
|
|
DateTime operator -( const DateTime& that ) const;
|
|
DateTime operator +=( const DateTime& that );
|
|
DateTime operator -=( const DateTime& that );
|
|
|
|
/**
|
|
* Returns the local time-zone offset from GMT (minutes).
|
|
*
|
|
*/
|
|
static int getTimeZoneOffset();
|
|
static int getTimeZoneStandardOffset();
|
|
int isValid() const;
|
|
int isLeapYear(int nYear) const;
|
|
|
|
DateTime& init(const DateTime& d2);
|
|
DateTime& init( int year, int month, int day, int hour = 0, int minutes = 0, int seconds = 0 );
|
|
|
|
private:
|
|
void initStatics()const;
|
|
int getLocalGMTOffset( int hour, int minute) const;
|
|
bool isDayLight() const;
|
|
|
|
static tm dateElementsToTm( const date_t& dateTime);
|
|
static date_t tmToDate( const tm& date);
|
|
|
|
// Internal date structure, in local time
|
|
date_t m_dateTime;
|
|
|
|
|
|
static std::string s_NullDateString;
|
|
static int s_standardOffset;
|
|
static int s_daylightOffset;
|
|
|
|
|
|
};
|
|
|
|
#include <base_utils/libbase_utils_undef.h>
|
|
#endif
|