From bca73df3dafd3f14ad20d89fbf1fa85e822017ae Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 13 Feb 2012 09:22:45 +0000 Subject: [PATCH] .Core: ScanTime git-svn-id: svn://ultimatepp.org/upp/trunk@4583 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/Complex.h | 3 +- uppsrc/Core/TimeDate.cpp | 59 ++++++++++++++++++++++++++-------------- uppsrc/Core/TimeDate.h | 3 +- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/uppsrc/Core/Complex.h b/uppsrc/Core/Complex.h index a3808e0ad..0654e60aa 100644 --- a/uppsrc/Core/Complex.h +++ b/uppsrc/Core/Complex.h @@ -9,11 +9,10 @@ struct Complex : std::complex Complex(double r, double i) : C(r,i) {} Complex(const C& c) : C(c) {} - Complex(const Nuller&) : C(DOUBLE_NULL) {} + Complex(const Nuller&) : C(DOUBLE_NULL, DOUBLE_NULL) {} operator Value() const { return RichValue(*this); } Complex(const Value& v) : C(IsNumber(v) ? Complex((double)v) : RichValue::Extract(v)) {} - bool operator==(const Complex& c) const { return (const C&)(*this) == (const C&)c; } bool operator!=(const Complex& c) const { return (const C&)(*this) != (const C&)c; } }; diff --git a/uppsrc/Core/TimeDate.cpp b/uppsrc/Core/TimeDate.cpp index 200b3c202..065163926 100644 --- a/uppsrc/Core/TimeDate.cpp +++ b/uppsrc/Core/TimeDate.cpp @@ -26,8 +26,7 @@ int GetDaysOfMonth(int m, int y) { } bool Date::IsValid() const { - return year == -32768 /* TRC fix 2007/06/17:was == 0 */ || month >= 1 && month <= 12 && - day >= 1 && day <= GetDaysOfMonth(month, year); + return year == -32768 || month >= 1 && month <= 12 && day >= 1 && day <= GetDaysOfMonth(month, year); } String DayName(int i, int lang) @@ -94,22 +93,6 @@ const char *StrToDate(Date& d, const char *s, Date def) return StrToDate(s_date_scan, d, s, def); } -Date ScanDate(const char *fmt, const char *s, Date def) -{ - Date d; - if(StrToDate(fmt, d, s, def)) - return d; - return def; -} - -Date ScanDate(const char *s, Date def) -{ - Date d; - if(StrToDate(d, s, def)) - return d; - return def; -} - const char *StrToDate(const char *fmt, Date& d, const char *s, Date def) { if(*s == 0) { @@ -176,6 +159,22 @@ const char *StrToDate(Date& d, const char *s) return StrToDate(d, s, Null); } +Date ScanDate(const char *fmt, const char *s, Date def) +{ + Date d; + if(StrToDate(fmt, d, s, def)) + return d; + return def; +} + +Date ScanDate(const char *s, Date def) +{ + Date d; + if(StrToDate(d, s, def)) + return d; + return def; +} + static bool s_date_letters = true, s_date_upper = true; static char s_date_seps[64] = "A/\a .-"; @@ -444,9 +443,9 @@ String Format(Time time, bool seconds) : Format(" %02d:%02d", time.hour, time.minute)); } -const char *StrToTime(Time& d, const char *s) +const char *StrToTime(const char *datefmt, Time& d, const char *s) { - s = StrToDate(d, s); + s = StrToDate(datefmt, d, s); if(!s) return NULL; d.hour = d.minute = d.second = 0; @@ -467,6 +466,26 @@ const char *StrToTime(Time& d, const char *s) return s; } +const char *StrToTime(Time& d, const char *s) +{ + return StrToTime(s_date_scan, d, s); +} + +Time ScanTime(const char *datefmt, const char *s, Time def) +{ + Time tm; + if(StrToTime(datefmt, tm, s)) + return tm; + return def; +} + +Time ScanDate(const char *s, Time def) +{ + Time tm; + if(StrToTime(tm, s)) + return tm; + return def; +} #ifdef PLATFORM_WIN32 diff --git a/uppsrc/Core/TimeDate.h b/uppsrc/Core/TimeDate.h index a3d332c5e..deb2c253b 100644 --- a/uppsrc/Core/TimeDate.h +++ b/uppsrc/Core/TimeDate.h @@ -141,8 +141,9 @@ Time GetSysTime(); Time GetUtcTime(); String Format(Time time, bool seconds = true); +const char *StrToTime(const char *datefmt, Time& d, const char *s); const char *StrToTime(Time& d, const char *s); -Time ScanTime(const char *fmt, const char *s, Time def = Null); +Time ScanTime(const char *datefmt, const char *s, Time def = Null); Time ScanTime(const char *s, Time def = Null); template<>