Как извлечь дату и время из строки?

Вход : строки с датой и необязательным временем. Различные представления были бы хороши, но необходимы. Строки предоставляются пользователем и могут быть искажены. Примеры:

  • «2004-03-21 12:45:33» (я считаю это макетом по умолчанию)
  • «2004/03/21 12:45:33» (необязательный макет)
  • «23.09.2004 04:12:21» (немецкий формат, необязательно)
  • «2003-02-11» (время может отсутствовать)

Необходимые выходные данные : Секунды с начала Эпохи (01.01.1970 00:00:00) или какой-либо другой фиксированной точки.

Бонус : Кроме того, было бы здорово читать смещение UTC местного системного времени.

Ввод Предполагается, что это местное время на рассматриваемой машине. Строки предоставляются пользователем и могут быть искажены. Примеры:

  • «2004-03-21 12:45:33» (я считаю это макетом по умолчанию)
  • «2004/03/21 12:45:33» (необязательный макет)
  • «23.09.2004 04:12:21» (немецкий формат, необязательно)
  • «2003-02-11» (время может отсутствовать)

Необходимые выходные данные : Секунды с начала Эпохи (01.01.1970 00:00:00) или какой-либо другой фиксированной точки.

Бонус : Кроме того, было бы здорово читать смещение UTC местного системного времени.

Ввод Предполагается, что это местное время на рассматриваемой машине. Строки предоставляются пользователем и могут быть искажены. Примеры:

  • «2004-03-21 12:45:33» (я считаю это макетом по умолчанию)
  • «2004/03/21 12:45:33» (необязательный макет)
  • «23.09.2004 04:12:21» (немецкий формат, необязательно)
  • «2003-02-11» (время может отсутствовать)

Необходимые выходные данные : Секунды с начала Эпохи (01.01.1970 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, но я не знаю как.

53
задан BartoszKP 20 January 2015 в 05:32
поделиться