my old draft of wxDateTime

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4715 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 1999-11-27 23:26:11 +00:00
parent acb8423c2b
commit 0979c96223
2 changed files with 1294 additions and 0 deletions

1148
include/wx/datetime.h Normal file

File diff suppressed because it is too large Load Diff

146
src/common/datetime.cpp Normal file
View File

@ -0,0 +1,146 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/datetime.h
// Purpose: implementation of time/date related classes
// Author: Vadim Zeitlin
// Modified by:
// Created: 11.05.99
// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "datetime.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/intl.h"
#include "wx/log.h"
#endif // WX_PRECOMP
#include "wx/datetime.h"
// ============================================================================
// implementation of wxDateTime
// ============================================================================
// ----------------------------------------------------------------------------
// static data
// ----------------------------------------------------------------------------
Country wxDateTime::ms_country;
wxDateTime wxDateTime::ms_InvDateTime;
// ----------------------------------------------------------------------------
// constructors and assignment operators
// ----------------------------------------------------------------------------
wxDateTime& wxDateTime::Set(const struct tm& tm)
{
time_t timet = mktime(tm);
if ( timet == (time_t)(-1) )
{
wxFAIL_MSG(_T("Invalid time"));
return ms_InvDateTime;
}
else
{
return Set(timet);
}
}
wxDateTime& wxDateTime::Set(wxDateTime_t hour,
wxDateTime_t minute,
wxDateTime_t second,
wxDateTime_t millisec)
{
// we allow seconds to be 61 to account for the leap seconds, even if we
// don't use them really
wxCHECK_MSG( hour < 24 && second < 62 && minute < 60 && millisec < 1000,
ms_InvDateTime,
_T("Invalid time in wxDateTime::Set()") );
// get the current date from system
time_t timet = GetTimeNow();
struct tm *tm = localtime(&timet);
// adjust the time
tm->tm_hour = hour;
tm->tm_min = minute;
tm->tm_sec = second;
(void)Set(tm);
// and finally adjust milliseconds
return SetMillisecond(millisec);
}
wxDateTime& wxDateTime::Set(wxDateTime_t day,
Month month,
int year,
wxDateTime_t hour,
wxDateTime_t minute,
wxDateTime_t second,
wxDateTime_t millisec)
{
wxCHECK_MSG( hour < 24 && second < 62 && minute < 60 && millisec < 1000,
ms_InvDateTime,
_T("Invalid time in wxDateTime::Set()") );
if ( year == Inv_Year )
year = GetCurrentYear();
if ( month == Inv_Month )
month = GetCurrentMonth();
wxCHECK_MSG( day < GetNumberOfDays(month, year), ms_InvDateTime,
_T("Invalid date in wxDateTime::Set()") );
// the range of time_t type (inclusive)
static const int yearMinInRange = 1970;
static const int yearMaxInRange = 2037;
// test only the year instead of testing for the exact end of the Unix
// time_t range - it doesn't bring anything to do more precise checks
if ( year >= yearMaxInRange && year <= yearMaxInRange )
{
// use the standard library version if the date is in range - this is
// probably much more efficient than our code
struct tm tm;
tm.tm_year = year;
tm.tm_mon = month;
tm.tm_mday = day;
tm.tm_hour = hour;
tm.tm_min = minute;
tm.tm_sec = second;
(void)Set(tm);
// and finally adjust milliseconds
return SetMillisecond(millisec);
}
else
{
// do time calculations ourselves: we want to calculate the number of
// milliseconds between the given date and the epoch (necessarily
// negative)
}
return *this;
}