// assert, even though it is a perfectly legal use.
if ( am )
{
- if (wxStrftime(buffer, sizeof buffer, _T("%p"), &tm) > 0)
+ if (wxStrftime(buffer, sizeof(buffer)/sizeof(wxChar), _T("%p"), &tm) > 0)
*am = wxString(buffer);
else
*am = wxString();
if ( pm )
{
tm.tm_hour = 13;
- if (wxStrftime(buffer, sizeof buffer, _T("%p"), &tm) > 0)
+ if (wxStrftime(buffer, sizeof(buffer)/sizeof(wxChar), _T("%p"), &tm) > 0)
*pm = wxString(buffer);
else
*pm = wxString();
wxDATETIME_CHECK( tm, _T("localtime() failed") );
+ // make a copy so it isn't clobbered by the call to mktime() below
+ struct tm tm1(*tm);
+
// adjust the time
- tm->tm_hour = hour;
- tm->tm_min = minute;
- tm->tm_sec = second;
+ tm1.tm_hour = hour;
+ tm1.tm_min = minute;
+ tm1.tm_sec = second;
// and the DST in case it changes on this date
- struct tm tm2(*tm);
+ struct tm tm2(tm1);
mktime(&tm2);
- if ( tm2.tm_isdst != tm->tm_isdst )
- tm->tm_isdst = tm2.tm_isdst;
+ if ( tm2.tm_isdst != tm1.tm_isdst )
+ tm1.tm_isdst = tm2.tm_isdst;
- (void)Set(*tm);
+ (void)Set(tm1);
// and finally adjust milliseconds
return SetMillisecond(millisec);
// done using wxLocale, in which case thread's current locale is also
// set to correct LCID value and we can use GetLocaleInfo to determine
// the correct formatting string:
+#ifdef __WXWINCE__
+ LCID lcid = LOCALE_USER_DEFAULT;
+#else
LCID lcid = GetThreadLocale();
+#endif
wxChar delim[5]; // fields deliminer, 4 chars max
if ( GetLocaleInfo(lcid, LOCALE_SDATE, delim, 5) )
{