|
|
// This is a part of the Active Template Library.
// Copyright (C) 1996-2001 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
#ifndef __ATLTIME_H__
#define __ATLTIME_H__
#pragma once
#include <atldef.h>
#ifndef _ATL_MIN_CRT
#include <time.h>
#ifdef _AFX
#include <afxstr.h>
#else
#include <atlstr.h>
#endif
#endif
namespace ATL { class CTimeSpan { public: CTimeSpan() throw(); CTimeSpan( __time64_t time ) throw(); CTimeSpan( LONG lDays, int nHours, int nMins, int nSecs ) throw();
LONGLONG GetDays() const throw(); LONGLONG GetTotalHours() const throw(); LONG GetHours() const throw(); LONGLONG GetTotalMinutes() const throw(); LONG GetMinutes() const throw(); LONGLONG GetTotalSeconds() const throw(); LONG GetSeconds() const throw();
__time64_t GetTimeSpan() const throw();
CTimeSpan operator+( CTimeSpan span ) const throw(); CTimeSpan operator-( CTimeSpan span ) const throw(); CTimeSpan& operator+=( CTimeSpan span ) throw(); CTimeSpan& operator-=( CTimeSpan span ) throw(); bool operator==( CTimeSpan span ) const throw(); bool operator!=( CTimeSpan span ) const throw(); bool operator<( CTimeSpan span ) const throw(); bool operator>( CTimeSpan span ) const throw(); bool operator<=( CTimeSpan span ) const throw(); bool operator>=( CTimeSpan span ) const throw();
#ifndef _ATL_MIN_CRT
public: CString Format( LPCTSTR pszFormat ) const; CString Format( UINT nID ) const; #endif
#if defined(_AFX) && defined(_UNICODE)
// REVIEW
// for compatibility with MFC 3.x
CString Format(LPCSTR pFormat) const; #endif
#ifdef _AFX
CArchive& Serialize64(CArchive& ar); #endif
private: __time64_t m_timeSpan; };
class CTime { public: static CTime GetCurrentTime() throw();
CTime() throw(); CTime( __time64_t time ) throw(); CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1 ) throw(); CTime( WORD wDosDate, WORD wDosTime, int nDST = -1 ) throw(); CTime( const SYSTEMTIME& st, int nDST = -1 ) throw(); CTime( const FILETIME& ft, int nDST = -1 ) throw(); #ifdef __oledb_h__
CTime( const DBTIMESTAMP& dbts, int nDST = -1 ) throw(); #endif
CTime& operator=( __time64_t time ) throw();
CTime& operator+=( CTimeSpan span ) throw(); CTime& operator-=( CTimeSpan span ) throw();
CTimeSpan operator-( CTime time ) const throw(); CTime operator-( CTimeSpan span ) const throw(); CTime operator+( CTimeSpan span ) const throw();
bool operator==( CTime time ) const throw(); bool operator!=( CTime time ) const throw(); bool operator<( CTime time ) const throw(); bool operator>( CTime time ) const throw(); bool operator<=( CTime time ) const throw(); bool operator>=( CTime time ) const throw();
struct tm* GetGmtTm( struct tm* ptm = NULL ) const throw(); struct tm* GetLocalTm( struct tm* ptm = NULL ) const throw(); bool GetAsSystemTime( SYSTEMTIME& st ) const throw(); #ifdef __oledb_h__
bool GetAsDBTIMESTAMP( DBTIMESTAMP& dbts ) const throw(); #endif
__time64_t GetTime() const throw();
int GetYear() const throw(); int GetMonth() const throw(); int GetDay() const throw(); int GetHour() const throw(); int GetMinute() const throw(); int GetSecond() const throw(); int GetDayOfWeek() const throw();
#ifndef _ATL_MIN_CRT
// formatting using "C" strftime
CString Format( LPCTSTR pszFormat ) const; CString FormatGmt( LPCTSTR pszFormat ) const; CString Format( UINT nFormatID ) const; CString FormatGmt( UINT nFormatID ) const; #endif
#if defined(_AFX) && defined(_UNICODE)
// REVIEW
// for compatibility with MFC 3.x
CString Format(LPCSTR pFormat) const; CString FormatGmt(LPCSTR pFormat) const; #endif
#ifdef _AFX
CArchive& Serialize64(CArchive& ar); #endif
private: __time64_t m_time; };
class COleDateTimeSpan { // Constructors
public: COleDateTimeSpan() throw();
COleDateTimeSpan(double dblSpanSrc) throw(); COleDateTimeSpan(LONG lDays, int nHours, int nMins, int nSecs) throw();
// Attributes
enum DateTimeSpanStatus { valid = 0, invalid = 1, // Invalid span (out of range, etc.)
null = 2, // Literally has no value
};
double m_span; DateTimeSpanStatus m_status;
void SetStatus(DateTimeSpanStatus status) throw(); DateTimeSpanStatus GetStatus() const throw();
double GetTotalDays() const throw(); // span in days (about -3.65e6 to 3.65e6)
double GetTotalHours() const throw(); // span in hours (about -8.77e7 to 8.77e6)
double GetTotalMinutes() const throw(); // span in minutes (about -5.26e9 to 5.26e9)
double GetTotalSeconds() const throw(); // span in seconds (about -3.16e11 to 3.16e11)
LONG GetDays() const throw(); // component days in span
LONG GetHours() const throw(); // component hours in span (-23 to 23)
LONG GetMinutes() const throw(); // component minutes in span (-59 to 59)
LONG GetSeconds() const throw(); // component seconds in span (-59 to 59)
// Operations
COleDateTimeSpan& operator=(double dblSpanSrc) throw();
bool operator==(const COleDateTimeSpan& dateSpan) const throw(); bool operator!=(const COleDateTimeSpan& dateSpan) const throw(); bool operator<(const COleDateTimeSpan& dateSpan) const throw(); bool operator>(const COleDateTimeSpan& dateSpan) const throw(); bool operator<=(const COleDateTimeSpan& dateSpan) const throw(); bool operator>=(const COleDateTimeSpan& dateSpan) const throw();
// DateTimeSpan math
COleDateTimeSpan operator+(const COleDateTimeSpan& dateSpan) const throw(); COleDateTimeSpan operator-(const COleDateTimeSpan& dateSpan) const throw(); COleDateTimeSpan& operator+=(const COleDateTimeSpan dateSpan) throw(); COleDateTimeSpan& operator-=(const COleDateTimeSpan dateSpan) throw(); COleDateTimeSpan operator-() const throw();
operator double() const throw();
void SetDateTimeSpan(LONG lDays, int nHours, int nMins, int nSecs) throw();
#ifndef _ATL_MIN_CRT
// formatting
CString Format(LPCTSTR pFormat) const; CString Format(UINT nID) const; #endif
// Implementation
void CheckRange();
private: static const double OLE_DATETIME_HALFSECOND; };
class COleDateTime { // Constructors
public: static COleDateTime GetCurrentTime() throw();
COleDateTime() throw();
COleDateTime(const VARIANT& varSrc) throw(); COleDateTime(DATE dtSrc) throw();
#ifndef _WIN64
COleDateTime(time_t timeSrc) throw();
#endif // _WIN64
COleDateTime(__time64_t timeSrc) throw();
COleDateTime(const SYSTEMTIME& systimeSrc) throw(); COleDateTime(const FILETIME& filetimeSrc) throw();
COleDateTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec) throw(); COleDateTime(WORD wDosDate, WORD wDosTime) throw();
// Attributes
enum DateTimeStatus { error = -1, valid = 0, invalid = 1, // Invalid date (out of range, etc.)
null = 2, // Literally has no value
};
DATE m_dt; DateTimeStatus m_status;
void SetStatus(DateTimeStatus status) throw(); DateTimeStatus GetStatus() const throw();
bool GetAsSystemTime(SYSTEMTIME& sysTime) const throw(); bool GetAsUDATE( UDATE& udate ) const throw();
int GetYear() const throw(); // Month of year (1 = January)
int GetMonth() const throw(); // Day of month (1-31)
int GetDay() const throw(); // Hour in day (0-23)
int GetHour() const throw(); // Minute in hour (0-59)
int GetMinute() const throw(); // Second in minute (0-59)
int GetSecond() const throw(); // Day of week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int GetDayOfWeek() const throw(); // Days since start of year (1 = January 1)
int GetDayOfYear() const throw();
// Operations
COleDateTime& operator=(const VARIANT& varSrc) throw(); COleDateTime& operator=(DATE dtSrc) throw();
#ifndef _WIN64
COleDateTime& operator=(const time_t& timeSrc) throw(); #endif // _WIN64
COleDateTime& operator=(const __time64_t& timeSrc) throw();
COleDateTime& operator=(const SYSTEMTIME& systimeSrc) throw(); COleDateTime& operator=(const FILETIME& filetimeSrc) throw(); COleDateTime& operator=(const UDATE& udate) throw();
bool operator==(const COleDateTime& date) const throw(); bool operator!=(const COleDateTime& date) const throw(); bool operator<(const COleDateTime& date) const throw(); bool operator>(const COleDateTime& date) const throw(); bool operator<=(const COleDateTime& date) const throw(); bool operator>=(const COleDateTime& date) const throw();
// DateTime math
COleDateTime operator+(COleDateTimeSpan dateSpan) const throw(); COleDateTime operator-(COleDateTimeSpan dateSpan) const throw(); COleDateTime& operator+=(COleDateTimeSpan dateSpan) throw(); COleDateTime& operator-=(COleDateTimeSpan dateSpan) throw();
// DateTimeSpan math
COleDateTimeSpan operator-(const COleDateTime& date) const throw();
operator DATE() const throw();
int SetDateTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec) throw(); int SetDate(int nYear, int nMonth, int nDay) throw(); int SetTime(int nHour, int nMin, int nSec) throw(); bool ParseDateTime(LPCTSTR lpszDate, DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT) throw();
#ifndef _ATL_MIN_CRT
// formatting
CString Format(DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT) const; CString Format(LPCTSTR lpszFormat) const; CString Format(UINT nFormatID) const; #endif
protected: static double DoubleFromDate( DATE date ) throw(); static DATE DateFromDouble( double f ) throw();
void CheckRange(); };
class CFileTimeSpan { public: CFileTimeSpan() throw(); CFileTimeSpan( const CFileTimeSpan& span ) throw(); CFileTimeSpan( LONGLONG nSpan ) throw();
CFileTimeSpan& operator=( const CFileTimeSpan& span ) throw();
CFileTimeSpan& operator+=( CFileTimeSpan span ) throw(); CFileTimeSpan& operator-=( CFileTimeSpan span ) throw();
CFileTimeSpan operator+( CFileTimeSpan span ) const throw(); CFileTimeSpan operator-( CFileTimeSpan span ) const throw();
bool operator==( CFileTimeSpan span ) const throw(); bool operator!=( CFileTimeSpan span ) const throw(); bool operator<( CFileTimeSpan span ) const throw(); bool operator>( CFileTimeSpan span ) const throw(); bool operator<=( CFileTimeSpan span ) const throw(); bool operator>=( CFileTimeSpan span ) const throw();
LONGLONG GetTimeSpan() const throw(); void SetTimeSpan( LONGLONG nSpan ) throw();
protected: LONGLONG m_nSpan; };
class CFileTime : public FILETIME { public: CFileTime() throw(); CFileTime( const FILETIME& ft ) throw(); CFileTime( ULONGLONG nTime ) throw();
static CFileTime GetCurrentTime() throw();
CFileTime& operator=( const FILETIME& ft ) throw();
CFileTime& operator+=( CFileTimeSpan span ) throw(); CFileTime& operator-=( CFileTimeSpan span ) throw();
CFileTime operator+( CFileTimeSpan span ) const throw(); CFileTime operator-( CFileTimeSpan span ) const throw(); CFileTimeSpan operator-( CFileTime ft ) const throw();
bool operator==( CFileTime ft ) const throw(); bool operator!=( CFileTime ft ) const throw(); bool operator<( CFileTime ft ) const throw(); bool operator>( CFileTime ft ) const throw(); bool operator<=( CFileTime ft ) const throw(); bool operator>=( CFileTime ft ) const throw();
ULONGLONG GetTime() const throw(); void SetTime( ULONGLONG nTime ) throw();
CFileTime UTCToLocal() const throw(); CFileTime LocalToUTC() const throw();
static const ULONGLONG Millisecond = 10000; static const ULONGLONG Second = Millisecond * 1000; static const ULONGLONG Minute = Second * 60; static const ULONGLONG Hour = Minute * 60; static const ULONGLONG Day = Hour * 24; static const ULONGLONG Week = Day * 7; };
}
#include <atltime.inl>
#endif // __ATLTIME_H__
|