diff options
| author | Vincent Richard <[email protected]> | 2006-02-12 14:13:04 +0000 |
|---|---|---|
| committer | Vincent Richard <[email protected]> | 2006-02-12 14:13:04 +0000 |
| commit | 0457e423609c6f55d3c841ab6ed8033c6ebb7ad1 (patch) | |
| tree | 41c98470022ca5ce5ef239b1cfacaceefd934a4f /src/utility/datetimeUtils.cpp | |
| parent | Fixed dangling 'else'-block when TLS is not enabled (thanks to Tim Teulings). (diff) | |
| download | vmime-0457e423609c6f55d3c841ab6ed8033c6ebb7ad1.tar.gz vmime-0457e423609c6f55d3c841ab6ed8033c6ebb7ad1.zip | |
Added unit tests for datetimeUtils + renamed functions.
Diffstat (limited to 'src/utility/datetimeUtils.cpp')
| -rw-r--r-- | src/utility/datetimeUtils.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/utility/datetimeUtils.cpp b/src/utility/datetimeUtils.cpp index c990a2ac..3bec7dbf 100644 --- a/src/utility/datetimeUtils.cpp +++ b/src/utility/datetimeUtils.cpp @@ -19,6 +19,8 @@ #include "vmime/utility/datetimeUtils.hpp" +#include <stdexcept> + namespace vmime { namespace utility { @@ -157,10 +159,10 @@ static inline void substractHoursAndMinutes(datetime& d, const int h, const int #endif // VMIME_BUILDING_DOC -const datetime datetimeUtils::localTimeToUniversalTime(const datetime& date) +const datetime datetimeUtils::toUniversalTime(const datetime& date) { if (date.getZone() == datetime::GMT) - return (date); + return date; // no conversion needed datetime nd(date); nd.setZone(datetime::GMT); @@ -178,19 +180,20 @@ const datetime datetimeUtils::localTimeToUniversalTime(const datetime& date) } -const datetime datetimeUtils::universalTimeToLocalTime(const datetime& date, const int zone) +const datetime datetimeUtils::toLocalTime(const datetime& date, const int zone) { - if (zone == 0) - return (date); + datetime utcDate(date); - datetime nd(date); + if (utcDate.getZone() != datetime::GMT) + utcDate = toUniversalTime(date); // convert to UT before + + datetime nd(utcDate); nd.setZone(zone); - const int z = zone; - const int h = (z < 0) ? (-z / 60) : (z / 60); - const int m = (z < 0) ? (-z - h * 60) : (z - h * 60); + const int h = (zone < 0) ? (-zone / 60) : (zone / 60); + const int m = (zone < 0) ? (-zone - h * 60) : (zone - h * 60); - if (z < 0) // GMT+hhmm: substract hours and minutes from date + if (zone < 0) // GMT+hhmm: substract hours and minutes from date substractHoursAndMinutes(nd, h, m); else // GMT-hhmm: add hours and minutes to date addHoursAndMinutes(nd, h, m); @@ -213,6 +216,9 @@ const int datetimeUtils::getDaysInMonth(const int year, const int month) static const int daysInMonthLeapYear[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + if (month < 1 || month > 12) + throw std::out_of_range("Invalid month number"); + return (isLeapYear(year) ? daysInMonthLeapYear[month - 1] : daysInMonth[month - 1]); } @@ -222,6 +228,11 @@ const int datetimeUtils::getDayOfWeek(const int year, const int month, const int int y = year; int m = month; + if (month < 1 || month > 12) + throw std::out_of_range("Invalid month number"); + else if (day < 1 || day > getDaysInMonth(year, month)) + throw std::out_of_range("Invalid day number"); + // From RFC-3339 - Appendix B. Day of the Week // Adjust months so February is the last one |
