1. wxLongLongWx::Assign(double) added (half implemented)
2. small wxDateTime bug fixed git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5121 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -685,16 +685,21 @@ public:
|
|||||||
// time. Using the functions below, it may be converted to another time
|
// time. Using the functions below, it may be converted to another time
|
||||||
// zone (for example, the Unix epoch is wxDateTime(1, Jan, 1970).ToGMT())
|
// zone (for example, the Unix epoch is wxDateTime(1, Jan, 1970).ToGMT())
|
||||||
//
|
//
|
||||||
|
// these functions try to handle DST internally, but there is no magical
|
||||||
|
// way to know all rules for it in all countries in the world, so if the
|
||||||
|
// program can handle it itself (or doesn't want to handle it at all for
|
||||||
|
// whatever reason), the DST handling can be disabled with noDST.
|
||||||
|
//
|
||||||
// Converting to the local time zone doesn't do anything.
|
// Converting to the local time zone doesn't do anything.
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
// transform to any given timezone
|
// transform to any given timezone
|
||||||
inline wxDateTime ToTimezone(const TimeZone& tz) const;
|
inline wxDateTime ToTimezone(const TimeZone& tz, bool noDST = FALSE) const;
|
||||||
wxDateTime& MakeTimezone(const TimeZone& tz);
|
wxDateTime& MakeTimezone(const TimeZone& tz, bool noDST = FALSE);
|
||||||
|
|
||||||
// transform to GMT/UTC
|
// transform to GMT/UTC
|
||||||
wxDateTime ToGMT() const { return ToTimezone(GMT0); }
|
wxDateTime ToGMT(bool noDST = FALSE) const { return ToTimezone(GMT0, noDST); }
|
||||||
wxDateTime& MakeGMT() { return MakeTimezone(GMT0); }
|
wxDateTime& MakeGMT(bool noDST = FALSE) { return MakeTimezone(GMT0, noDST); }
|
||||||
|
|
||||||
// is daylight savings time in effect at this moment according to the
|
// is daylight savings time in effect at this moment according to the
|
||||||
// rules of the specified country?
|
// rules of the specified country?
|
||||||
|
@@ -279,9 +279,10 @@ wxDateTime& wxDateTime::operator+=(const wxDateSpan& diff)
|
|||||||
// wxDateTime and timezones
|
// wxDateTime and timezones
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxDateTime wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz) const
|
wxDateTime wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz,
|
||||||
|
bool noDST) const
|
||||||
{
|
{
|
||||||
return wxDateTime(*this).MakeTimezone(tz);
|
return wxDateTime(*this).MakeTimezone(tz, noDST);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#include <limits.h> // for LONG_MAX
|
#include <limits.h> // for LONG_MAX
|
||||||
|
|
||||||
//#define wxUSE_LONGLONG_WX 1 // for testing (VZ)
|
// #define wxUSE_LONGLONG_WX 1 // for testing (VZ)
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// decide upon which class we will use
|
// decide upon which class we will use
|
||||||
|
@@ -1479,7 +1479,7 @@ int main(int argc, char **argv)
|
|||||||
#endif // TEST_MIME
|
#endif // TEST_MIME
|
||||||
|
|
||||||
#ifdef TEST_TIME
|
#ifdef TEST_TIME
|
||||||
if ( 0 )
|
if ( 1 )
|
||||||
{
|
{
|
||||||
TestTimeSet();
|
TestTimeSet();
|
||||||
TestTimeStatic();
|
TestTimeStatic();
|
||||||
@@ -1491,9 +1491,8 @@ int main(int argc, char **argv)
|
|||||||
TestTimeWDays();
|
TestTimeWDays();
|
||||||
TestTimeWNumber();
|
TestTimeWNumber();
|
||||||
TestTimeParse();
|
TestTimeParse();
|
||||||
}
|
|
||||||
|
|
||||||
TestTimeFormat();
|
TestTimeFormat();
|
||||||
|
}
|
||||||
#endif // TEST_TIME
|
#endif // TEST_TIME
|
||||||
|
|
||||||
wxUninitialize();
|
wxUninitialize();
|
||||||
|
@@ -833,7 +833,8 @@ wxDateTime wxDateTime::GetBeginDST(int year, Country country)
|
|||||||
|
|
||||||
dt += wxTimeSpan::Hours(1);
|
dt += wxTimeSpan::Hours(1);
|
||||||
|
|
||||||
dt.MakeGMT();
|
// disable DST tests because it could result in an infinite recursion!
|
||||||
|
dt.MakeGMT(TRUE);
|
||||||
}
|
}
|
||||||
else switch ( country )
|
else switch ( country )
|
||||||
{
|
{
|
||||||
@@ -933,7 +934,8 @@ wxDateTime wxDateTime::GetEndDST(int year, Country country)
|
|||||||
|
|
||||||
dt += wxTimeSpan::Hours(1);
|
dt += wxTimeSpan::Hours(1);
|
||||||
|
|
||||||
dt.MakeGMT();
|
// disable DST tests because it could result in an infinite recursion!
|
||||||
|
dt.MakeGMT(TRUE);
|
||||||
}
|
}
|
||||||
else switch ( country )
|
else switch ( country )
|
||||||
{
|
{
|
||||||
@@ -1505,7 +1507,7 @@ wxDateTime::wxDateTime_t wxDateTime::GetDayOfYear(const TimeZone& tz) const
|
|||||||
|
|
||||||
wxDateTime::wxDateTime_t wxDateTime::GetWeekOfYear(const TimeZone& tz) const
|
wxDateTime::wxDateTime_t wxDateTime::GetWeekOfYear(const TimeZone& tz) const
|
||||||
{
|
{
|
||||||
#if 0
|
#if 1
|
||||||
// the first week of the year is the one which contains Jan, 4 (according
|
// the first week of the year is the one which contains Jan, 4 (according
|
||||||
// to ISO standard rule), so the year day N0 = 4 + 7*W always lies in the
|
// to ISO standard rule), so the year day N0 = 4 + 7*W always lies in the
|
||||||
// week W+1. As any day N = 7*W + 4 + (N - 4)%7, it lies in the same week
|
// week W+1. As any day N = 7*W + 4 + (N - 4)%7, it lies in the same week
|
||||||
@@ -1527,7 +1529,8 @@ wxDateTime::wxDateTime_t wxDateTime::GetWeekOfYear(const TimeZone& tz) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
return week;
|
return week;
|
||||||
#else // this seems to be a bit simpler and I believe is also correct
|
#else // 0
|
||||||
|
// an attempt at doing it simpler - but this doesn't quite work...
|
||||||
return (WeekDay)((GetDayOfYear(tz) - (GetWeekDay(tz) - 1 + 7) % 7 + 7) / 7);
|
return (WeekDay)((GetDayOfYear(tz) - (GetWeekDay(tz) - 1 + 7) % 7 + 7) / 7);
|
||||||
#endif // 0/1
|
#endif // 0/1
|
||||||
}
|
}
|
||||||
@@ -1628,12 +1631,13 @@ int wxDateTime::IsDST(wxDateTime::Country country) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDateTime& wxDateTime::MakeTimezone(const TimeZone& tz)
|
wxDateTime& wxDateTime::MakeTimezone(const TimeZone& tz, bool noDST)
|
||||||
{
|
{
|
||||||
int secDiff = GetTimeZone() + tz.GetOffset();
|
int secDiff = GetTimeZone() + tz.GetOffset();
|
||||||
|
|
||||||
// we need to know whether DST is or not in effect for this date
|
// we need to know whether DST is or not in effect for this date unless
|
||||||
if ( IsDST() == 1 )
|
// the test disabled by the caller
|
||||||
|
if ( !noDST && (IsDST() == 1) )
|
||||||
{
|
{
|
||||||
// FIXME we assume that the DST is always shifted by 1 hour
|
// FIXME we assume that the DST is always shifted by 1 hour
|
||||||
secDiff -= 3600;
|
secDiff -= 3600;
|
||||||
@@ -2395,7 +2399,7 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date,
|
|||||||
|
|
||||||
// this is the format which corresponds to ctime() output
|
// this is the format which corresponds to ctime() output
|
||||||
// and strptime("%c") should parse it, so try it first
|
// and strptime("%c") should parse it, so try it first
|
||||||
static const wxChar *fmtCtime = _T("%a %b %e %H:%M:%S %Y");
|
static const wxChar *fmtCtime = _T("%a %b %d %H:%M:%S %Y");
|
||||||
|
|
||||||
const wxChar *result = dt.ParseFormat(input, fmtCtime);
|
const wxChar *result = dt.ParseFormat(input, fmtCtime);
|
||||||
if ( !result )
|
if ( !result )
|
||||||
@@ -2621,18 +2625,27 @@ const wxChar *wxDateTime::ParseFormat(const wxChar *date,
|
|||||||
{
|
{
|
||||||
wxDateTime dt;
|
wxDateTime dt;
|
||||||
|
|
||||||
wxString fmtDate;
|
wxString fmtDate, fmtDateAlt;
|
||||||
if ( IsWestEuropeanCountry(GetCountry()) ||
|
if ( IsWestEuropeanCountry(GetCountry()) ||
|
||||||
GetCountry() == Russia )
|
GetCountry() == Russia )
|
||||||
{
|
{
|
||||||
fmtDate = _T("%d/%m/%y");
|
fmtDate = _T("%d/%m/%y");
|
||||||
|
fmtDateAlt = _T("%m/%d/%y");
|
||||||
}
|
}
|
||||||
else // assume USA
|
else // assume USA
|
||||||
{
|
{
|
||||||
fmtDate = _T("%m/%d/%y");
|
fmtDate = _T("%m/%d/%y");
|
||||||
|
fmtDateAlt = _T("%d/%m/%y");
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxChar *result = dt.ParseFormat(input, fmtDate);
|
const wxChar *result = dt.ParseFormat(input, fmtDate);
|
||||||
|
|
||||||
|
if ( !result )
|
||||||
|
{
|
||||||
|
// ok, be nice and try another one
|
||||||
|
result = dt.ParseFormat(input, fmtDateAlt);
|
||||||
|
}
|
||||||
|
|
||||||
if ( !result )
|
if ( !result )
|
||||||
{
|
{
|
||||||
// bad luck
|
// bad luck
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#include "wx/longlong.h"
|
#include "wx/longlong.h"
|
||||||
|
|
||||||
#include <memory.h> // for memset()
|
#include <memory.h> // for memset()
|
||||||
|
#include <math.h> // for fabs()
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
@@ -80,8 +81,28 @@ ostream& operator<< (ostream& o, const wxLongLongNative& ll)
|
|||||||
|
|
||||||
#endif // wxUSE_LONGLONG_NATIVE
|
#endif // wxUSE_LONGLONG_NATIVE
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxLongLongWx: emulation of 'long long' using 2 longs
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
#if wxUSE_LONGLONG_WX
|
#if wxUSE_LONGLONG_WX
|
||||||
|
|
||||||
|
// assignment
|
||||||
|
wxLongLongWx& wxLongLongWx::Assign(double d)
|
||||||
|
{
|
||||||
|
if ( fabs(d) <= LONG_MAX )
|
||||||
|
{
|
||||||
|
m_hi = d < 0 ? 1 << (8*sizeof(long) - 1) : 0l;
|
||||||
|
m_lo = (long)d;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxFAIL_MSG(_T("TODO"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
wxLongLongWx wxLongLongWx::operator<<(int shift) const
|
wxLongLongWx wxLongLongWx::operator<<(int shift) const
|
||||||
{
|
{
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
|
Reference in New Issue
Block a user