1 #include <NovaTimingUtilities/TimingUtilities.h> 2 #include <boost/date_time/posix_time/posix_time.hpp> 5 namespace BPT = boost::posix_time;
18 uint64_t& outputNovaTime)
20 if ((
unsigned)inputUnixTime.tv_sec <
NOVA_EPOCH) {
return false;}
22 long seconds=inputUnixTime.tv_sec;
24 if (seconds > 1341100799)
26 if (seconds > 1435708799)
31 if (seconds > 1483228799)
50 uint64_t& outputNovaTime)
52 if ((
unsigned)inputUnixTime.tv_sec <
NOVA_EPOCH) {
return false;}
55 time_t adjusted_seconds = inputUnixTime.tv_sec;
56 if (adjusted_seconds > 1341100799)
59 if (adjusted_seconds > 1435708799)
63 if (adjusted_seconds > 1483228799)
85 uint64_t& outputNovaTime)
87 time_t timeret = timegm(&inputUnixTime);
88 if ( timeret < 0 )
return false;
90 inputtimeval.tv_sec = timeret;
91 inputtimeval.tv_usec = 0;
114 uint16_t mon, uint32_t
year, uint64_t& outputNovaTime) {
119 timeTM.tm_hour =
hour;
120 timeTM.tm_mday = mday;
122 timeTM.tm_year =
year;
134 struct timeval& outputUnixTime)
136 double doubleTime = (double) inputNovaTime /
138 time_t time_sec = (time_t) doubleTime;
139 outputUnixTime.tv_sec =
NOVA_EPOCH + time_sec;
140 outputUnixTime.tv_usec = (suseconds_t)
141 ((doubleTime - (
double)time_sec) * 1000000);
143 if (outputUnixTime.tv_sec > 1341100799)
144 { --outputUnixTime.tv_sec;
146 if (outputUnixTime.tv_sec > 1435708799)
147 { --outputUnixTime.tv_sec;
150 if (outputUnixTime.tv_sec > 1483228799)
152 --outputUnixTime.tv_sec;
166 double doubleTime = (double) inputNovaTime /
168 time_t time_sec = (time_t) doubleTime;
169 outputUnixTime.tv_sec =
NOVA_EPOCH + time_sec;
170 outputUnixTime.tv_nsec = (long)
173 if (outputUnixTime.tv_sec > 1341100799)
174 { --outputUnixTime.tv_sec;
176 if (outputUnixTime.tv_sec > 1435708799)
177 { --outputUnixTime.tv_sec;
180 if (outputUnixTime.tv_sec > 1483228799)
182 --outputUnixTime.tv_sec;
198 struct tm& outputUnixTime)
200 timeval outputTimeval;
202 outputUnixTime = *gmtime(&(outputTimeval.tv_sec));
222 uint16_t& sec, uint16_t&
min, uint16_t&
hour, uint16_t& mday,
223 uint16_t& mon, uint32_t&
year)
228 sec = outputTimeTM.tm_sec;
229 min = outputTimeTM.tm_min;
230 hour = outputTimeTM.tm_hour;
231 mday = outputTimeTM.tm_mday;
232 mon = outputTimeTM.tm_mon;
233 year = outputTimeTM.tm_year;
248 if (gettimeofday(&now, 0) != 0) {
262 BPT::ptime posixTime = BPT::from_time_t(unixTime.tv_sec);
263 std::string workingString = BPT::to_simple_string(posixTime);
269 uint64_t fractionalPart = inputNovaTime - wholePart;
270 uint64_t picoSeconds = (uint64_t) (1E12 * fractionalPart /
NOVA_TIME_FACTOR);
271 char fractionalString[20];
272 sprintf(fractionalString,
"%012llu", (
unsigned long long)picoSeconds);
273 workingString.append(
".");
274 workingString.append(fractionalString);
275 workingString.append(
" UTC");
277 return workingString;
286 BPT::ptime posixTime = BPT::from_time_t(inputUnixTime.tv_sec);
287 std::string workingString = BPT::to_simple_string(posixTime);
290 char fractionalString[20];
291 sprintf(fractionalString,
"%09ld", inputUnixTime.tv_nsec);
292 workingString.append(
".");
293 workingString.append(fractionalString);
294 workingString.append(
" UTC");
296 return workingString;
305 BPT::ptime posixTime = BPT::from_time_t(inputUnixTime.tv_sec);
306 std::string workingString = BPT::to_simple_string(posixTime);
309 char fractionalString[20];
310 sprintf(fractionalString,
"%06ld", inputUnixTime.tv_usec);
311 workingString.append(
".");
312 workingString.append(fractionalString);
313 workingString.append(
" UTC");
315 return workingString;
328 struct timeval *
x =
new struct timeval;
329 struct timeval *
y =
new struct timeval;
330 x->tv_sec = xx->tv_sec; x->tv_usec = xx->tv_usec;
331 y->tv_sec = yy->tv_sec; y->tv_usec = yy->tv_usec;
334 if (x->tv_usec < y->tv_usec) {
335 int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
336 y->tv_usec -= 1000000 * nsec;
339 if (x->tv_usec - y->tv_usec > 1000000) {
340 int nsec = (x->tv_usec - y->tv_usec) / 1000000;
341 y->tv_usec += 1000000 * nsec;
347 result->tv_sec = x->tv_sec - y->tv_sec;
348 result->tv_usec = x->tv_usec - y->tv_usec;
351 return x->tv_sec < y->tv_sec;
const uint32_t NOVA_EPOCH
const uint64_t NOVA_TIME_FACTOR
bool convertNovaTimeToUnixTime(uint64_t const &inputNovaTime, struct timespec &outputUnixTime)
bool getCurrentNovaTime(uint64_t &outputNovaTime)
std::string convertNovaTimeToString(uint64_t const &inputNovaTime)
int timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y)
static float min(const float a, const float b, const float c)
std::string convertUnixTimeToString(struct timespec const &inputNovaTime)
bool convertUnixTimeToNovaTime(struct timespec const &inputUnixTime, uint64_t &outputNovaTime)
static constexpr Double_t year