#include <config.h>
#include "support/lyxtime.h"
-#include "LyXRC.h"
-using std::string;
+#include "support/debug.h"
+#include "support/environment.h"
+#include "support/lstrings.h"
+#include "support/qstring_helpers.h"
+
+#include <QDateTime>
+#include <QLocale>
+
+using namespace std;
namespace lyx {
+namespace support {
-time_type current_time()
+time_t current_time()
{
- return time(0);
+ return time(nullptr);
}
-string const formatted_time(time_type t, string const & fmt)
+docstring formatted_datetime(time_t t, string const & fmt)
{
- struct tm * loc_tm = localtime(&t);
- char date[50];
- strftime(date, sizeof(date), fmt.c_str(), loc_tm);
- return string(date);
+ QString qres;
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+ if (fmt.empty())
+ qres = QLocale().toString(QDateTime::fromSecsSinceEpoch(t),
+ QLocale::ShortFormat);
+ else
+ qres = QLocale().toString(QDateTime::fromSecsSinceEpoch(t),
+ toqstr(fmt));
+#else
+ if (fmt.empty())
+ qres = QLocale().toString(QDateTime::fromTime_t(t),
+ QLocale::ShortFormat);
+ else
+ qres = QLocale().toString(QDateTime::fromTime_t(t), toqstr(fmt));
+#endif
+ return qstring_to_ucs4(qres);
}
-string const formatted_time(time_type t)
+time_t from_asctime_utc(string t)
{
- return formatted_time(t, lyxrc.date_insert_format);
+ // Example for the format: "Sun Nov 6 10:39:39 2011\n"
+ // Generously remove trailing '\n' (and other whitespace if needed)
+ t = trim(t, " \t\r\n");
+ // toDateTime() is too stupid to recognize variable amounts of
+ // whitespace (needed because ctime() outputs double spaces before
+ // single digit day numbers and hours)
+ t = subst(t, " ", " ");
+ QString const format("ddd MMM d H:mm:ss yyyy");
+ QLocale loc("C");
+ QDateTime loc_dt = loc.toDateTime(toqstr(t), format);
+ if (!loc_dt.isValid()) {
+ LYXERR(Debug::LOCALE, "Could not parse `" << t
+ << "ยด (invalid format)");
+ return static_cast<time_t>(-1);
+ }
+ loc_dt.setTimeSpec(Qt::UTC);
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+ return loc_dt.toSecsSinceEpoch();
+#else
+ return loc_dt.toTime_t();
+#endif
}
+} // namespace support
} // namespace lyx