Ввод: строки с указанием даты и дополнительного времени. Различные представления были бы хорошими, но необходимыми. Строки поставляются пользователем и могут быть искажены. Примеры:Как анализировать дату/время из строки?
"2004-03-21 12:45:33"
(я считаю это расположение по умолчанию)"2004/03/21 12:45:33"
(опционально макет)"23.09.2004 04:12:21"
(немецкий формат, опционально)"2003-02-11"
(время может отсутствовать)
Необходимый результат: секунды с эпохи (1970/01/01 00:00:00) или некоторые другие фиксированные точки.
Бонус: Кроме того, чтение UTC-смещения местного системного времени было бы замечательным.
Вход считается предполагаемым местным временем на рассматриваемой машине. Выход должен быть UTC. Система - только Linux (нужны Debian Lenny и Ubuntu).
Я попытался использовать boost/date_time
, но должен признать, что я не могу обернуть голову вокруг документации. Следующие работы без необходимого перехода от системы местного времени в UTC:
std::string date = "2000-01-01";
boost::posix_time::ptime ptimedate = boost::posix_time::time_from_string(date);
ptimedate += boost::posix_time::hours(Hardcoded_UTC_Offset);// where to get from?
struct tm = boost::posix_time::to_tm(ptimedate);
int64_t ticks = mktime(&mTmTime);
Я думаю boost::date_time
могут обеспечить необходимое смещение UTC, но я не знаю, как.
Я считаю, что вам придется разбирать их самостоятельно (возможно, с духом), потому что однозначный номер месяца в «2004-3-21» не может быть проанализирован ни одним из спецификаторов формата ввода-вывода в формате времени http: //www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html#date_time.format_flags – Cubbi
@Cubbi: если это единственная проблема, гораздо проще проверить это и вставить 0 в чтобы привести дух в картину. –
@Cubbi - вы можете обрабатывать пользовательские форматы ввода и вывода в 'boost :: date_time' -' boost :: spirit' здесь переполняется –