-////////////////////////////////////////////////////////////////////////////////\r
-\r
-// Author: Andy Rushton\r
-// Copyright: (c) Southampton University 1999-2004\r
-// (c) Andy Rushton 2004-2009\r
-// License: BSD License, see ../docs/license.html\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-#include "time.hpp"\r
-#include "dprintf.hpp"\r
-#include <ctype.h>\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-namespace stlplus\r
-{\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
-\r
- time_t time_now(void)\r
- {\r
- return time(0);\r
- }\r
-\r
- time_t localtime_create(int year, int month, int day, int hour, int minute, int second)\r
- {\r
- tm tm_time;\r
- tm_time.tm_year = year-1900; // years are represented as an offset from 1900, for reasons unknown\r
- tm_time.tm_mon = month-1; // internal format represents month as 0-11, but it is friendlier to take an input 1-12\r
- tm_time.tm_mday = day;\r
- tm_time.tm_hour = hour;\r
- tm_time.tm_min = minute;\r
- tm_time.tm_sec = second;\r
- tm_time.tm_isdst = -1; // specify that the function should work out daylight savings\r
- time_t result = mktime(&tm_time);\r
- return result;\r
- }\r
-\r
- int localtime_year(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_year + 1900;\r
- }\r
-\r
- int localtime_month(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_mon + 1;\r
- }\r
-\r
- int localtime_day(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_mday;\r
- }\r
-\r
- int localtime_hour(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_hour;\r
- }\r
-\r
- int localtime_minute(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_min;\r
- }\r
-\r
- int localtime_second(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_sec;\r
- }\r
-\r
- int localtime_weekday(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_wday;\r
- }\r
-\r
- int localtime_yearday(time_t t)\r
- {\r
- tm* tm_time = localtime(&t);\r
- return tm_time->tm_yday;\r
- }\r
-\r
- std::string localtime_string(time_t t)\r
- {\r
- tm* local = localtime(&t);\r
- std::string result = local ? asctime(local) : "*time not available*";\r
- // ctime appends a newline for no apparent reason - clean up\r
- while (!result.empty() && isspace(result[result.size()-1]))\r
- result.erase(result.size()-1,1);\r
- return result;\r
- }\r
-\r
- std::string delaytime_string(time_t seconds)\r
- {\r
- unsigned minutes = (unsigned)seconds / 60;\r
- seconds %= 60;\r
- unsigned hours = minutes / 60;\r
- minutes %= 60;\r
- unsigned days = hours / 24;\r
- hours %= 24;\r
- unsigned weeks = days / 7;\r
- days %= 7;\r
- std::string result;\r
- if (weeks > 0)\r
- result += dformat("%dw ",weeks);\r
- if (!result.empty() || days > 0)\r
- result += dformat("%dd ", days);\r
- if (!result.empty() || hours > 0)\r
- result += dformat("%d:", hours);\r
- if (!result.empty() || minutes > 0)\r
- {\r
- if (!result.empty())\r
- result += dformat("%02d:", minutes);\r
- else\r
- result += dformat("%d:", minutes);\r
- }\r
- if (!result.empty())\r
- result += dformat("%02d:", seconds);\r
- else\r
- result += dformat("%ds", seconds);\r
- return result;\r
- }\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
-\r
-} // end namespace stlplus\r
+////////////////////////////////////////////////////////////////////////////////
+
+// Author: Andy Rushton
+// Copyright: (c) Southampton University 1999-2004
+// (c) Andy Rushton 2004-2009
+// License: BSD License, see ../docs/license.html
+
+////////////////////////////////////////////////////////////////////////////////
+#include "time.hpp"
+#include "dprintf.hpp"
+#include <ctype.h>
+////////////////////////////////////////////////////////////////////////////////
+
+namespace stlplus
+{
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+ time_t time_now(void)
+ {
+ return time(0);
+ }
+
+ time_t localtime_create(int year, int month, int day, int hour, int minute, int second)
+ {
+ tm tm_time;
+ tm_time.tm_year = year-1900; // years are represented as an offset from 1900, for reasons unknown
+ tm_time.tm_mon = month-1; // internal format represents month as 0-11, but it is friendlier to take an input 1-12
+ tm_time.tm_mday = day;
+ tm_time.tm_hour = hour;
+ tm_time.tm_min = minute;
+ tm_time.tm_sec = second;
+ tm_time.tm_isdst = -1; // specify that the function should work out daylight savings
+ time_t result = mktime(&tm_time);
+ return result;
+ }
+
+ int localtime_year(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_year + 1900;
+ }
+
+ int localtime_month(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_mon + 1;
+ }
+
+ int localtime_day(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_mday;
+ }
+
+ int localtime_hour(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_hour;
+ }
+
+ int localtime_minute(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_min;
+ }
+
+ int localtime_second(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_sec;
+ }
+
+ int localtime_weekday(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_wday;
+ }
+
+ int localtime_yearday(time_t t)
+ {
+ tm* tm_time = localtime(&t);
+ return tm_time->tm_yday;
+ }
+
+ std::string localtime_string(time_t t)
+ {
+ tm* local = localtime(&t);
+ std::string result = local ? asctime(local) : "*time not available*";
+ // ctime appends a newline for no apparent reason - clean up
+ while (!result.empty() && isspace(result[result.size()-1]))
+ result.erase(result.size()-1,1);
+ return result;
+ }
+
+ std::string delaytime_string(time_t seconds)
+ {
+ unsigned minutes = (unsigned)seconds / 60;
+ seconds %= 60;
+ unsigned hours = minutes / 60;
+ minutes %= 60;
+ unsigned days = hours / 24;
+ hours %= 24;
+ unsigned weeks = days / 7;
+ days %= 7;
+ std::string result;
+ if (weeks > 0)
+ result += dformat("%dw ",weeks);
+ if (!result.empty() || days > 0)
+ result += dformat("%dd ", days);
+ if (!result.empty() || hours > 0)
+ result += dformat("%d:", hours);
+ if (!result.empty() || minutes > 0)
+ {
+ if (!result.empty())
+ result += dformat("%02d:", minutes);
+ else
+ result += dformat("%d:", minutes);
+ }
+ if (!result.empty())
+ result += dformat("%02d:", seconds);
+ else
+ result += dformat("%ds", seconds);
+ return result;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+
+} // end namespace stlplus