X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/92f89387a8ab67e331d42e3d345d7e1ac786c022..2ef989c972df0bd023ec3b7252fb91afca55f8ab:/include/wx/datetime.h diff --git a/include/wx/datetime.h b/include/wx/datetime.h index 5028137aa2..5aac2b16d4 100644 --- a/include/wx/datetime.h +++ b/include/wx/datetime.h @@ -124,8 +124,8 @@ WXDLLIMPEXP_BASE struct tm *wxGmtime_r(const time_t*, struct tm*); // wxInvalidDateTime) class WXDLLIMPEXP_FWD_BASE wxDateTime; -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxDefaultDateTimeFormat; -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxDefaultTimeSpanFormat; +extern WXDLLIMPEXP_DATA_BASE(const char *) wxDefaultDateTimeFormat; +extern WXDLLIMPEXP_DATA_BASE(const char *) wxDefaultTimeSpanFormat; extern WXDLLIMPEXP_DATA_BASE(const wxDateTime) wxDefaultDateTime; #define wxInvalidDateTime wxDefaultDateTime @@ -418,7 +418,16 @@ public: { public: TimeZone(TZ tz); - TimeZone(wxDateTime_t offset = 0) { m_offset = offset; } + + // create time zone object with the given offset + TimeZone(long offset = 0) { m_offset = offset; } + + static TimeZone Make(long offset) + { + TimeZone tz; + tz.m_offset = offset; + return tz; + } long GetOffset() const { return m_offset; } @@ -1028,27 +1037,152 @@ public: // conversion to/from text: all conversions from text return the pointer to // the next character following the date specification (i.e. the one where - // the scan had to stop) or NULL on failure. + // the scan had to stop) or NULL on failure; for the versions taking + // wxString or wxCStrData, we don't know if the user code needs char* or + // wchar_t* pointer and so we return char* one for compatibility with the + // existing ANSI code and also return iterator in another output parameter + // (it will be equal to end if the entire string was parsed) // ------------------------------------------------------------------------ // parse a string in RFC 822 format (found e.g. in mail headers and // having the form "Wed, 10 Feb 1999 19:07:07 +0100") - const wxChar *ParseRfc822Date(const wxChar* date); + const char *ParseRfc822Date(const wxString& date, + wxString::const_iterator *end = NULL); + const char *ParseRfc822Date(const wxCStrData& date, + wxString::const_iterator *end = NULL) + { + return ParseRfc822Date(date.AsString(), end); + } + + const wchar_t *ParseRfc822Date(const wchar_t* date) + { + return ReturnEndAsWidePtr(&wxDateTime::ParseRfc822Date, date); + } + + const char *ParseRfc822Date(const char* date) + { + return ParseRfc822Date(wxString(date)); + } + // parse a date/time in the given format (see strptime(3)), fill in // the missing (in the string) fields with the values of dateDef (by // default, they will not change if they had valid values or will // default to Today() otherwise) - const wxChar *ParseFormat(const wxChar *date, - const wxString& format = wxDefaultDateTimeFormat, - const wxDateTime& dateDef = wxDefaultDateTime); + const char *ParseFormat(const wxString& date, + const wxString& format = wxDefaultDateTimeFormat, + const wxDateTime& dateDef = wxDefaultDateTime, + wxString::const_iterator *end = NULL); + + const char *ParseFormat(const wxString& date, + const char *format = wxDefaultDateTimeFormat, + const wxDateTime& dateDef = wxDefaultDateTime, + wxString::const_iterator *end = NULL) + { + return ParseFormat(date, wxString(format), dateDef, end); + } + + const char *ParseFormat(const wxString& date, + const wxString& format = wxDefaultDateTimeFormat, + wxString::const_iterator *end = NULL) + { + return ParseFormat(date, format, wxDefaultDateTime, end); + } + + const char *ParseFormat(const wxCStrData& date, + const wxString& format = wxDefaultDateTimeFormat, + const wxDateTime& dateDef = wxDefaultDateTime, + wxString::const_iterator *end = NULL) + { + return ParseFormat(date.AsString(), format, dateDef, end); + } + + const wchar_t *ParseFormat(const wchar_t *date, + const wxString& format = wxDefaultDateTimeFormat, + const wxDateTime& dateDef = wxDefaultDateTime) + { + const wxString datestr(date); + wxString::const_iterator end; + if ( !ParseFormat(datestr, format, dateDef, &end) ) + return NULL; + + return date + (end - datestr.begin()); + } + + const char *ParseFormat(const char *date, + const wxString& format = L"%c", + const wxDateTime& dateDef = wxDefaultDateTime) + { + return ParseFormat(wxString(date), format, dateDef); + } + + const char *ParseFormat(const char *date, + const char *format = wxDefaultDateTimeFormat, + const wxDateTime& dateDef = wxDefaultDateTime) + { + return ParseFormat(wxString(date), wxString(format), dateDef); + } + // parse a string containing the date/time in "free" format, this // function will try to make an educated guess at the string contents - const wxChar *ParseDateTime(const wxChar *datetime); + const char *ParseDateTime(const wxString& datetime, + wxString::const_iterator *end = NULL); + + const char *ParseDateTime(const wxCStrData& datetime, + wxString::const_iterator *end = NULL) + { + return ParseDateTime(datetime.AsString(), end); + } + + const wchar_t *ParseDateTime(const wchar_t *datetime) + { + return ReturnEndAsWidePtr(&wxDateTime::ParseDateTime, datetime); + } + + const char *ParseDateTime(const char *datetime) + { + return ParseDateTime(wxString(datetime)); + } + // parse a string containing the date only in "free" format (less // flexible than ParseDateTime) - const wxChar *ParseDate(const wxChar *date); + const char *ParseDate(const wxString& date, + wxString::const_iterator *end = NULL); + + const char *ParseDate(const wxCStrData& date, + wxString::const_iterator *end = NULL) + { + return ParseDate(date.AsString(), end); + } + + const wchar_t *ParseDate(const wchar_t *date) + { + return ReturnEndAsWidePtr(&wxDateTime::ParseDate, date); + } + + const char *ParseDate(const char *date) + { + return ParseDate(wxString(date)); + } + // parse a string containing the time only in "free" format - const wxChar *ParseTime(const wxChar *time); + const char *ParseTime(const wxString& time, + wxString::const_iterator *end = NULL); + + const char *ParseTime(const wxCStrData& time, + wxString::const_iterator *end = NULL) + { + return ParseTime(time.AsString(), end); + } + + const wchar_t *ParseTime(const wchar_t *time) + { + return ReturnEndAsWidePtr(&wxDateTime::ParseTime, time); + } + + const char *ParseTime(const char *time) + { + return ParseTime(wxString(time)); + } // this function accepts strftime()-like format string (default // argument corresponds to the preferred date and time representation @@ -1090,6 +1224,23 @@ public: static struct tm *GetTmNow(struct tm *tmstruct); private: + // helper function for defining backward-compatible wrappers for code + // using wchar_t* pointer instead of wxString iterators + typedef + const char *(wxDateTime::*StringMethod)(const wxString& s, + wxString::const_iterator *end); + + const wchar_t *ReturnEndAsWidePtr(StringMethod func, const wchar_t *p) + { + const wxString s(p); + wxString::const_iterator end; + if ( !(this->*func)(s, &end) ) + return NULL; + + return p + (end - s.begin()); + } + + // the current country - as it's the same for all program objects (unless // it runs on a _really_ big cluster system :-), this is a static member: // see SetCountry() and GetCountry()