DCL 4.0
Loading...
Searching...
No Matches
DateTime Class Reference

#include <DateTime.h>

Public Member Functions

 DateTime ()
 DateTime (const DateTime &src)
 DateTime (time_t timer)
 DateTime (const Date &date, const Time &time)
 DateTime (int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nMSec=0)
void assign (time_t time)
void assign (const Date &date, const Time &time)
void assign (int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nMSec=0)
const DateTimeoperator= (const DateTime &src)
const DateTimeoperator+= (const Interval &iv)
const DateTimeoperator-= (const Interval &iv)
String toString () const
String toStringF (const wchar_t *pszFormat=NULL) const
Datedate ()
const Datedate () const
Timetime ()
const Timetime () const

Static Public Member Functions

static int compare (const DateTime &dt1, const DateTime &dt2)
static int64_t getCurrentTimeMillis ()
static DateTime getCurrentUTCTime ()
static DateTime getCurrentLocalTime ()

Static Public Attributes

static const wchar_t * FORMAT_STRING = L"%Y-%m-%d %H:%M:%S"

Protected Attributes

Date m_date
Time m_time

Detailed Description

Definition at line 213 of file DateTime.h.

Constructor & Destructor Documentation

◆ DateTime() [1/5]

DateTime::DateTime ( )
inline

Definition at line 216 of file DateTime.h.

216{ }

◆ DateTime() [2/5]

DateTime::DateTime ( const DateTime & src)

Definition at line 699 of file DateTime.cpp.

700{
701 m_date = src.m_date;
702 m_time = src.m_time;
703}
Time m_time
Definition DateTime.h:265
Date m_date
Definition DateTime.h:264

◆ DateTime() [3/5]

DateTime::DateTime ( time_t timer)

Definition at line 705 of file DateTime.cpp.

706{
707 assign(time);
708}
void assign(time_t time)
Definition DateTime.cpp:723
Time & time()
Definition DateTime.inl:162

◆ DateTime() [4/5]

DateTime::DateTime ( const Date & date,
const Time & time )

Definition at line 710 of file DateTime.cpp.

711{
712 m_date = date;
713 m_time = time;
714}
Date & date()
Definition DateTime.inl:152

◆ DateTime() [5/5]

DateTime::DateTime ( int nYear,
int nMonth,
int nDay,
int nHour,
int nMin,
int nSec,
int nMSec = 0 )

Definition at line 716 of file DateTime.cpp.

718{
719 m_date.assign(nYear, nMonth, nDay);
720 m_time.assign(nHour, nMin, nSec, nMSec);
721}

Member Function Documentation

◆ assign() [1/3]

void DateTime::assign ( const Date & date,
const Time & time )

Definition at line 748 of file DateTime.cpp.

749{
750 m_date = date;
751 m_time = time;
752}

◆ assign() [2/3]

void DateTime::assign ( int nYear,
int nMonth,
int nDay,
int nHour,
int nMin,
int nSec,
int nMSec = 0 )

Definition at line 754 of file DateTime.cpp.

756{
757 m_date.assign(nYear, nMonth, nDay);
758 m_time.assign(nHour, nMin, nSec, nMSec);
759}

◆ assign() [3/3]

void DateTime::assign ( time_t time)

Definition at line 723 of file DateTime.cpp.

724{
725 long tm_gmtoff = 0;
726
727#if __DCL_WINDOWS
728 long seconds;
729 _get_timezone(&seconds);
730 tm_gmtoff = -seconds;
731#else
732 struct tm tm;
733 localtime_r(&timer, &tm);
734 tm_gmtoff = tm.tm_gmtoff;
735#endif
736
737 m_date.assign(
738 (long) (719163 + ((timer + tm_gmtoff) / SEC_PER_DAY)) // 1970-01-01 00:00:00 + time
739 );
740 m_time.assign(
741 0,
742 0,
743 timer % SEC_PER_DAY + tm_gmtoff,
744 0
745 );
746}
#define SEC_PER_DAY
Definition DateTime.cpp:389

◆ compare()

int DateTime::compare ( const DateTime & dt1,
const DateTime & dt2 )
static

Definition at line 869 of file DateTime.cpp.

870{
871 if (dt1.m_date < dt2.m_date)
872 return -1;
873 else if (dt1.m_date == dt2.m_date) {
874 if (dt1.m_time < dt2.m_time)
875 return -1;
876 else if (dt1.m_time == dt2.m_time)
877 return 0;
878 }
879 return 1;
880}

◆ date() [1/2]

Date & DateTime::date ( )
inline

Definition at line 152 of file DateTime.inl.

153{
154 return m_date;
155}

◆ date() [2/2]

const Date & DateTime::date ( ) const
inline

Definition at line 157 of file DateTime.inl.

158{
159 return m_date;
160}

◆ getCurrentLocalTime()

DateTime DateTime::getCurrentLocalTime ( )
static

Definition at line 937 of file DateTime.cpp.

938{
939 DateTime dt;
940#if __DCL_WINDOWS
941 struct _timeb t;
942 _ftime_s(&t);
943
944 dt.m_date.assign(
945 (long) (719163 + ((t.time - t.timezone * 60) / SEC_PER_DAY)) // 1970-01-01 00:00:00 + time
946 );
947 dt.m_time.assign(
948 0,
949 -t.timezone,
950 t.time % SEC_PER_DAY,
951 t.millitm
952 );
953#else
954 time_t timer;
955 struct tm tm;
956 ::time(&timer);
957 localtime_r(&timer, &tm);
958
959 struct timeval tv;
960 gettimeofday(&tv, NULL);
961
962 dt.m_date.assign(
963 719163 + (tv.tv_sec + tm.tm_gmtoff) / SEC_PER_DAY // 1970-01-01 00:00:00 + time
964 );
965 dt.m_time.assign(
966 0,
967 0,
968 tv.tv_sec % SEC_PER_DAY + tm.tm_gmtoff,
969 tv.tv_usec / 1000
970 );
971#endif
972 return dt;
973}
#define NULL
Definition Config.h:340
void assign(int nYear, int nMonth, int nDay)
Definition DateTime.cpp:49
void assign(int nHour, int nMin, int nSec, int nMSec=0)
Definition DateTime.cpp:406

◆ getCurrentTimeMillis()

int64_t DateTime::getCurrentTimeMillis ( )
static

Definition at line 882 of file DateTime.cpp.

883{
884#if __DCL_WINDOWS
885 SYSTEMTIME t;
886 GetSystemTime(&t);
887
888 Date dt(t.wYear, t.wMonth, t.wDay);
889 int64_t r = dt.days() * 24;
890 r = (r + t.wHour) * 60;
891 r = (r + t.wMinute) * 60;
892 r = (r + t.wSecond) * 1000;
893 r += t.wMilliseconds;
894 return r;
895#else
896 struct timeval tv;
897 gettimeofday(&tv, NULL);
898 int64_t r = tv.tv_sec * 1000;
899 r += tv.tv_usec / 1000;
900 return r;
901#endif
902}
ByteString r

◆ getCurrentUTCTime()

DateTime DateTime::getCurrentUTCTime ( )
static

Definition at line 904 of file DateTime.cpp.

905{
906 DateTime dt;
907#if __DCL_WINDOWS
908 struct _timeb t;
909 _ftime_s(&t);
910
911 dt.m_date.assign(
912 (long) (719163 + (t.time / SEC_PER_DAY)) // 1970-01-01 00:00:00 + time
913 );
914 dt.m_time.assign(
915 0,
916 0,
917 t.time % SEC_PER_DAY,
918 t.millitm
919 );
920#else
921 struct timeval tv;
922 gettimeofday(&tv, NULL);
923
924 dt.m_date.assign(
925 719163 + tv.tv_sec / SEC_PER_DAY // 1970-01-01 00:00:00 + time
926 );
927 dt.m_time.assign(
928 0,
929 0,
930 tv.tv_sec % SEC_PER_DAY,
931 tv.tv_usec / 1000
932 );
933#endif
934 return dt;
935}

◆ operator+=()

const DateTime & DateTime::operator+= ( const Interval & iv)

Definition at line 769 of file DateTime.cpp.

770{
771 int64_t ms = (int64_t)m_date.days() * MSEC_PER_DAY
772 + (int64_t)m_time.totalMilliSeconds()
773 + iv.totalMilliSeconds();
774
775 m_date.assign((long)(ms / MSEC_PER_DAY));
776 m_time.assign((long)(ms % MSEC_PER_DAY));
777
778 return *this;
779}
#define MSEC_PER_DAY
Definition DateTime.cpp:390
int64_t totalMilliSeconds() const
Definition DateTime.inl:116

◆ operator-=()

const DateTime & DateTime::operator-= ( const Interval & iv)

Definition at line 781 of file DateTime.cpp.

782{
783 int64_t ms = (int64_t)m_date.days() * MSEC_PER_DAY
784 + (int64_t)m_time.totalMilliSeconds()
785 - iv.totalMilliSeconds();
786
787 m_date.assign((long)(ms / MSEC_PER_DAY));
788 m_time.assign((long)(ms % MSEC_PER_DAY));
789
790 return *this;
791}

◆ operator=()

const DateTime & DateTime::operator= ( const DateTime & src)

Definition at line 761 of file DateTime.cpp.

762{
763 m_date = src.m_date;
764 m_time = src.m_time;
765
766 return *this;
767}

◆ time() [1/2]

Time & DateTime::time ( )
inline

Definition at line 162 of file DateTime.inl.

163{
164 return m_time;
165}

◆ time() [2/2]

const Time & DateTime::time ( ) const
inline

Definition at line 167 of file DateTime.inl.

168{
169 return m_time;
170}

◆ toString()

String DateTime::toString ( ) const

Definition at line 826 of file DateTime.cpp.

827{
828 return m_date.toString() + L" " + m_time.toString();
829}

◆ toStringF()

String DateTime::toStringF ( const wchar_t * pszFormat = NULL) const

Definition at line 834 of file DateTime.cpp.

835{
836 if (!pszFormat)
837 pszFormat = FORMAT_STRING;
838
839 __DCL_ASSERT(*pszFormat != L'\0');
840
841 int nYear, nMonth, nDay, nHour, nMin, nSec, nMSec;
842 m_date.decode(nYear, nMonth, nDay);
843 m_time.decode(nHour, nMin, nSec, nMSec);
844
845 struct tm t;
846 t.tm_year = nYear - 1900;
847 t.tm_mon = nMonth - 1;
848 t.tm_mday = nDay;
849 t.tm_hour = nHour;
850 t.tm_min = nMin;
851 t.tm_sec = nSec;
852
853 t.tm_wday = 0;
854 t.tm_yday = 0;
855 t.tm_isdst = -1;
856
857 CharBuffer* buf = CharBuffer::create(DATETIME_FORMAT_BUFFER_SIZE);
858 size_t n = wcsftime(buf->data(), DATETIME_FORMAT_BUFFER_SIZE, pszFormat, &t);
859 __DCL_ASSERT(buf->__allocLength >= n);
860 buf->__dataLength = n;
861 __DCL_ASSERT(buf->data()[buf->__dataLength] == __T('\0'));
862
863 String r = buf;
864 buf->release();
865 return r;
866}
#define DATETIME_FORMAT_BUFFER_SIZE
Definition DateTime.h:21
#define __DCL_ASSERT(expr)
Definition Object.h:371
#define __T(str)
Definition Object.h:44
ByteBuffer * buf
void CharsetConvertException *size_t n
Definition SQLField.cpp:253
static const wchar_t * FORMAT_STRING
Definition DateTime.h:236

Member Data Documentation

◆ FORMAT_STRING

const wchar_t * DateTime::FORMAT_STRING = L"%Y-%m-%d %H:%M:%S"
static

Definition at line 236 of file DateTime.h.

◆ m_date

Date DateTime::m_date
protected

Definition at line 264 of file DateTime.h.

◆ m_time

Time DateTime::m_time
protected

Definition at line 265 of file DateTime.h.


The documentation for this class was generated from the following files: