aboutsummaryrefslogtreecommitdiffstats
path: root/src/utility/datetimeUtils.cpp
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2006-02-12 14:13:04 +0000
committerVincent Richard <[email protected]>2006-02-12 14:13:04 +0000
commit0457e423609c6f55d3c841ab6ed8033c6ebb7ad1 (patch)
tree41c98470022ca5ce5ef239b1cfacaceefd934a4f /src/utility/datetimeUtils.cpp
parentFixed dangling 'else'-block when TLS is not enabled (thanks to Tim Teulings). (diff)
downloadvmime-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.cpp31
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