На мой взгляд, лучший подход - сохранить представление на основе эпох как целое число. Наиболее стандартным является сохранение секунд с 1970 года. Поскольку вы хотите сохранить более высокое разрешение, вы можете увеличить его и оставить микросекунды или миллисекунды с 1970 года. Для этого вам нужно использовать как минимум 64-битное целое число ( долго долго).
Posix gettimeofday () даст вам разрешение вплоть до микросекунд, и вы можете комбинировать это с функцией gmtime_r (), чтобы получить оставшуюся часть штампа. Для окон я использую функцию GetSystemTime (), чтобы получить время в разрешении до миллисекунд (на самом деле, я думаю, что это десятки миллисекунд). Следующий фрагмент кода демонстрирует этот подход (не то, что мои единицы времени - это наносекунды).
LgrDate rtn;
#ifdef _WIN32
SYSTEMTIME sys;
GetSystemTime(&sys);
rtn.setDate(
sys.wYear,
sys.wMonth,
sys.wDay);
rtn.setTime(
sys.wHour,
sys.wMinute,
sys.wSecond,
sys.wMilliseconds*uint4(nsecPerMSec));
#else
struct timeval time_of_day;
struct tm broken_down;
gettimeofday(&time_of_day,0);
gmtime_r(
&time_of_day.tv_sec,
&broken_down);
rtn.setDate(
broken_down.tm_year + 1900,
broken_down.tm_mon + 1,
broken_down.tm_mday);
rtn.setTime(
broken_down.tm_hour,
broken_down.tm_min,
broken_down.tm_sec,
time_of_day.tv_usec * nsecPerUSec);
#endif
return rtn;