artdaq_core  v3_04_09
TimeUtils.cc
1 #include "artdaq-core/Utilities/TimeUtils.hh"
2 #include <boost/date_time/posix_time/posix_time.hpp>
3 
4 namespace BPT = boost::posix_time;
5 
6 std::string artdaq::TimeUtils::
7 convertUnixTimeToString(time_t inputUnixTime)
8 {
9  // whole seconds
10  BPT::ptime posixTime = BPT::from_time_t(inputUnixTime);
11  std::string workingString = BPT::to_simple_string(posixTime);
12  workingString.append(" UTC");
13 
14  return workingString;
15 }
16 
17 std::string artdaq::TimeUtils::
18 convertUnixTimeToString(struct timeval const& inputUnixTime)
19 {
20  // deal with whole seconds first
21  BPT::ptime posixTime = BPT::from_time_t(inputUnixTime.tv_sec);
22  std::string workingString = BPT::to_simple_string(posixTime);
23 
24  // now fractional seconds
25  char fractionalString[20];
26  sprintf(fractionalString, "%06d", static_cast<int32_t>(inputUnixTime.tv_usec));
27  workingString.append(".");
28  workingString.append(fractionalString);
29  workingString.append(" UTC");
30 
31  return workingString;
32 }
33 
34 std::string artdaq::TimeUtils::
35 convertUnixTimeToString(struct timespec const& inputUnixTime)
36 {
37  // deal with whole seconds first
38  BPT::ptime posixTime = BPT::from_time_t(inputUnixTime.tv_sec);
39  std::string workingString = BPT::to_simple_string(posixTime);
40 
41  // now fractional seconds
42  char fractionalString[20];
43  sprintf(fractionalString, "%09ld", inputUnixTime.tv_nsec);
44  workingString.append(".");
45  workingString.append(fractionalString);
46  workingString.append(" UTC");
47 
48  return workingString;
49 }
50 
52 {
53  struct timeval tv;
54  gettimeofday(&tv, NULL);
55  return (uint64_t)tv.tv_sec * 1000000 + tv.tv_usec;
56 }
57 
59 convertUnixTimeToSeconds(time_t inputUnixTime)
60 {
61  return static_cast<double>(inputUnixTime);
62 }
63 
65 convertUnixTimeToSeconds(struct timeval const& inputUnixTime)
66 {
67  return static_cast<double>(inputUnixTime.tv_sec) + inputUnixTime.tv_usec / 1000000.0;
68 }
69 
71 convertUnixTimeToSeconds(struct timespec const& inputUnixTime)
72 {
73  return static_cast<double>(inputUnixTime.tv_sec) + inputUnixTime.tv_nsec / 1000000000.0; // Mr. Billion
74 }
double convertUnixTimeToSeconds(time_t inputUnixTime)
Converts a Unix time to double.
Definition: TimeUtils.cc:59
std::string convertUnixTimeToString(time_t inputUnixTime)
Converts a Unix time to its string representation, in UTC.
Definition: TimeUtils.cc:7
uint64_t gettimeofday_us()
Get the current time of day in microseconds (from gettimeofday system call)
Definition: TimeUtils.cc:51