Time class: add toStr()
Stefan Schuermans

Stefan Schuermans commited on 2019-05-04 14:39:12
Showing 4 changed files, with 62 additions and 0 deletions.

... ...
@@ -4,8 +4,11 @@
4 4
    a blinkenarea.org project */
5 5
 
6 6
 #include <errno.h>
7
+#include <iomanip>
7 8
 #include <math.h>
9
+#include <sstream>
8 10
 #include <stdint.h>
11
+#include <string>
9 12
 #include <sys/time.h>
10 13
 #include <time.h>
11 14
 
... ...
@@ -202,6 +205,27 @@ void Time::toTimeval(struct timeval &tv) const
202 205
   }
203 206
 }
204 207
 
208
+/**
209
+ * @brief convert to human-readable string
210
+ * @return human-readable string
211
+ */
212
+std::string Time::toStr() const
213
+{
214
+  time_t sec = m_sec;
215
+  struct tm t;
216
+  localtime_r(&sec, &t);
217
+  std::stringstream strm;
218
+  strm << std::setfill('0')
219
+       << std::setw(4) << (t.tm_year + 1900)
220
+       << "-" << std::setw(2) << (t.tm_mon + 1)
221
+       << "-" << std::setw(2) << t.tm_mday
222
+       << " " << std::setw(2) << t.tm_hour
223
+       << ":" << std::setw(2) << t.tm_min
224
+       << ":" << std::setw(2) << t.tm_sec
225
+       << "." << std::setw(9) << m_ns;
226
+  return strm.str();
227
+}
228
+
205 229
 /// fix internal time representation after calculation
206 230
 void Time::fix()
207 231
 {
... ...
@@ -7,6 +7,7 @@
7 7
 #define BLINKER_TIME_H
8 8
 
9 9
 #include <stdint.h>
10
+#include <string>
10 11
 #include <sys/time.h>
11 12
 #include <time.h>
12 13
 
... ...
@@ -85,6 +86,12 @@ public:
85 86
    */
86 87
   void toTimeval(struct timeval &tv) const;
87 88
 
89
+  /**
90
+   * @brief convert to human-readable string
91
+   * @return human-readable string
92
+   */
93
+  std::string toStr() const;
94
+
88 95
 public:
89 96
   /// sleep for duration
90 97
   void sleepFor() const;
... ...
@@ -5,8 +5,11 @@
5 5
 
6 6
 #include <winsock2.h> // not allowed after windows.h, so include here
7 7
 #include <windows.h>
8
+#include <iomanip>
8 9
 #include <math.h>
10
+#include <sstream>
9 11
 #include <stdint.h>
12
+#include <string>
10 13
 
11 14
 #include "Time.h"
12 15
 
... ...
@@ -240,6 +243,27 @@ void Time::fromFileTime(FILETIME const &ft)
240 243
   m_ns = (ft_u.u.QuadPart % 10000000ULL) * 100ULL;
241 244
 }
242 245
 
246
+/**
247
+ * @brief convert to human-readable string
248
+ * @return human-readable string
249
+ */
250
+std::string Time::toStr() const
251
+{
252
+  time_t sec = m_sec;
253
+  struct tm t;
254
+  localtime_s(&t, &sec);
255
+  std::stringstream strm;
256
+  strm << std::setfill('0')
257
+       << std::setw(4) << (t.tm_year + 1900)
258
+       << "-" << std::setw(2) << (t.tm_mon + 1)
259
+       << "-" << std::setw(2) << t.tm_mday
260
+       << " " << std::setw(2) << t.tm_hour
261
+       << ":" << std::setw(2) << t.tm_min
262
+       << ":" << std::setw(2) << t.tm_sec
263
+       << "." << std::setw(9) << m_ns;
264
+  return strm.str();
265
+}
266
+
243 267
 /// fix internal time representation after calculation
244 268
 void Time::fix()
245 269
 {
... ...
@@ -9,6 +9,7 @@
9 9
 #include <winsock2.h> // not allowed after windows.h, so include here
10 10
 #include <windows.h>
11 11
 #include <stdint.h>
12
+#include <string>
12 13
 
13 14
 namespace Blinker {
14 15
 
... ...
@@ -97,6 +98,12 @@ public:
97 98
    */
98 99
   void fromFileTime(FILETIME const &ft);
99 100
 
101
+  /**
102
+   * @brief convert to human-readable string
103
+   * @return human-readable string
104
+   */
105
+  std::string toStr() const;
106
+
100 107
 public:
101 108
   /// sleep for duration
102 109
   void sleepFor() const;
103 110