+/**
+ * \brief Get both the date and time at the same time to avoid problem
+ * around midnight where two call could be before and after midnight
+ */
+std::string Util::GetCurrentDateTime()
+{
+ char tmp[40];
+ long milliseconds;
+ time_t timep;
+
+ // We need implementation specific functions to obtain millisecond precision
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__)
+ struct timeb tb;
+ ::ftime(&tb);
+ timep = tb.time;
+ milliseconds = tb.millitm;
+#else
+ struct timeval tv;
+ gettimeofday (&tv, NULL);
+ timep = tv.tv_sec;
+ // Compute milliseconds from microseconds.
+ milliseconds = tv.tv_usec / 1000;
+#endif
+ // Obtain the time of day, and convert it to a tm struct.
+ struct tm *ptm = localtime (&timep);
+ // Format the date and time, down to a single second.
+ strftime (tmp, sizeof (tmp), "%Y%m%d%H%M%S", ptm);
+
+ // Add milliseconds
+ std::string r = tmp;
+ r += Format("%03ld", milliseconds);
+
+ return r;
+}
+