make wxDateTime::ParseXXX() functions char*-friendly
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51059 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -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
|
||||
@@ -1037,36 +1037,145 @@ 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; for the versions returning
|
||||
// iterators, end iterator is returned instead of NULL
|
||||
// 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")
|
||||
wxString::const_iterator ParseRfc822Date(const wxString& 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 = wxDefaultDateTimeFormat,
|
||||
const wxDateTime& dateDef = wxDefaultDateTime)
|
||||
{
|
||||
return ParseFormat(wxString(date), 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
|
||||
@@ -1108,6 +1217,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()
|
||||
|
Reference in New Issue
Block a user