00001 #include "artdaq-core/Utilities/TimeUtils.hh"
00002 #include <boost/date_time/posix_time/posix_time.hpp>
00003
00004 namespace BPT = boost::posix_time;
00005
00006 std::string artdaq::TimeUtils::
00007 convertUnixTimeToString(time_t inputUnixTime)
00008 {
00009
00010 BPT::ptime posixTime = BPT::from_time_t(inputUnixTime);
00011 std::string workingString = BPT::to_simple_string(posixTime);
00012 workingString.append(" UTC");
00013
00014 return workingString;
00015 }
00016
00017 std::string artdaq::TimeUtils::
00018 convertUnixTimeToString(struct timeval const& inputUnixTime)
00019 {
00020
00021 BPT::ptime posixTime = BPT::from_time_t(inputUnixTime.tv_sec);
00022 std::string workingString = BPT::to_simple_string(posixTime);
00023
00024
00025 char fractionalString[20];
00026 sprintf(fractionalString, "%06d", static_cast<int32_t>(inputUnixTime.tv_usec));
00027 workingString.append(".");
00028 workingString.append(fractionalString);
00029 workingString.append(" UTC");
00030
00031 return workingString;
00032 }
00033
00034 std::string artdaq::TimeUtils::
00035 convertUnixTimeToString(struct timespec const& inputUnixTime)
00036 {
00037
00038 BPT::ptime posixTime = BPT::from_time_t(inputUnixTime.tv_sec);
00039 std::string workingString = BPT::to_simple_string(posixTime);
00040
00041
00042 char fractionalString[20];
00043 sprintf(fractionalString, "%09ld", inputUnixTime.tv_nsec);
00044 workingString.append(".");
00045 workingString.append(fractionalString);
00046 workingString.append(" UTC");
00047
00048 return workingString;
00049 }
00050
00051 uint64_t artdaq::TimeUtils::gettimeofday_us()
00052 {
00053 struct timeval tv;
00054 gettimeofday(&tv, NULL);
00055 return (uint64_t)tv.tv_sec * 1000000 + tv.tv_usec;
00056 }
00057
00058 double artdaq::TimeUtils::
00059 convertUnixTimeToSeconds(time_t inputUnixTime)
00060 {
00061 return static_cast<double>(inputUnixTime);
00062 }
00063
00064 double artdaq::TimeUtils::
00065 convertUnixTimeToSeconds(struct timeval const& inputUnixTime)
00066 {
00067 return static_cast<double>(inputUnixTime.tv_sec) + inputUnixTime.tv_usec / 1000000.0;
00068 }
00069
00070 double artdaq::TimeUtils::
00071 convertUnixTimeToSeconds(struct timespec const& inputUnixTime)
00072 {
00073 return static_cast<double>(inputUnixTime.tv_sec) + inputUnixTime.tv_nsec / 1000000000.0;
00074 }