#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);
}
-string const formatted_time(time_type t, string const & fmt)
+string const formatted_time(time_t t, string const & fmt)
{
struct tm * loc_tm = localtime(&t);
char date[50];
}
-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);
+ return loc_dt.toTime_t();
}
+} // namespace support
} // namespace lyx