Я считываю csv данные, загруженные пользователями в моем приложении Ruby on Rails. Когда пользователь указывает, что конкретный столбец имеет даты (или времена), я хочу смочь автоматически обнаружить формат. Это означает, что может быть в американских или британских форматах (любой из дд/мм/гг, mm/dd/yy, yyyy-mm-dd, 12 февраля 2010, и т.д. и т.д.)
Я попробовал parsedate в Ruby, но он не работает и на американские и на британские даты, если Вы не указываете формат. Там какой-либо путь состоит в том, чтобы действительно сделать это правильно, или я прошу слишком много? Я не возражаю называть сценарий на другом языке только для этой задачи. Я задаюсь вопросом, как это обрабатывается в программах как документах Google и Excel.
Если у приложения нет местоположения, я не знаю, как вы можете это точно определить.
Однако вы знаете, что:
Вы можете написать свой собственный синтаксический анализатор с этими правилами, чтобы решить эту проблему. Однако он может (без указания местоположения приложения) неверно интерпретировать 10 мая 2010 г. как 5 октября 2010 г. в Великобритании или 10 мая 2010 г. в США.
мало что может сделать программа, чтобы волшебным образом определить, какой это тип краткого формата даты.
Если указать программе дату, например, 09.06.08, это может означать либо:
Когда Ruby анализирует даты из строки, он будет использовать поставщиков формата по умолчанию, чтобы определить, в каком формате находится дата. См. Документацию Ruby DateTime class для получения дополнительной информации.
Я думаю, что лучше всего в вашей ситуации было бы попытаться распределить все свои записи по группам, где каждая группа имеет один определенный формат даты. Если вы сами не можете вручную определить разницу между американскими и британскими датами по какому-либо критерию, к сожалению, программа не сможет этого сделать.
Однако ...если каждый пользователь из определенной локали, и вы можете сделать (довольно большое) предположение, что каждая дата, которую они загружают в CSV, соответствует стандартам формата даты их страны, вы можете использовать API интернационализации. Должна быть технически возможность получить языковой стандарт этого конкретного пользователя, а затем загрузить правильные данные i18n (с соответствующим средством форматирования даты) и проанализировать файл с помощью средства форматирования, которое предоставляет вам i18n. Прочтите руководство Rails Internationalization API , чтобы получить представление о том, как можно использовать i18n API.