То, что лучший способ состоит в том, чтобы обнаружить форматы даты в пользователе, отправило данные?

Я считываю csv данные, загруженные пользователями в моем приложении Ruby on Rails. Когда пользователь указывает, что конкретный столбец имеет даты (или времена), я хочу смочь автоматически обнаружить формат. Это означает, что может быть в американских или британских форматах (любой из дд/мм/гг, mm/dd/yy, yyyy-mm-dd, 12 февраля 2010, и т.д. и т.д.)

Я попробовал parsedate в Ruby, но он не работает и на американские и на британские даты, если Вы не указываете формат. Там какой-либо путь состоит в том, чтобы действительно сделать это правильно, или я прошу слишком много? Я не возражаю называть сценарий на другом языке только для этой задачи. Я задаюсь вопросом, как это обрабатывается в программах как документах Google и Excel.

1
задан michaelmichael 17 July 2010 в 17:13
поделиться

2 ответа

Если у приложения нет местоположения, я не знаю, как вы можете это точно определить.

Однако вы знаете, что:

  1. Всего 12 месяцев.
  2. Только года могут состоять из 4 цифр.
  3. Если он содержит текст, то это должен быть месяц.

Вы можете написать свой собственный синтаксический анализатор с этими правилами, чтобы решить эту проблему. Однако он может (без указания местоположения приложения) неверно интерпретировать 10 мая 2010 г. как 5 октября 2010 г. в Великобритании или 10 мая 2010 г. в США.

1
ответ дан 2 September 2019 в 22:59
поделиться

мало что может сделать программа, чтобы волшебным образом определить, какой это тип краткого формата даты.

Если указать программе дату, например, 09.06.08, это может означать либо:

  • 9 июня 2008 г., либо
  • 6 сентября 2008 г., либо, возможно, даже
  • 8 июня. , 2009.

Когда Ruby анализирует даты из строки, он будет использовать поставщиков формата по умолчанию, чтобы определить, в каком формате находится дата. См. Документацию Ruby DateTime class для получения дополнительной информации.

Я думаю, что лучше всего в вашей ситуации было бы попытаться распределить все свои записи по группам, где каждая группа имеет один определенный формат даты. Если вы сами не можете вручную определить разницу между американскими и британскими датами по какому-либо критерию, к сожалению, программа не сможет этого сделать.

Однако ...если каждый пользователь из определенной локали, и вы можете сделать (довольно большое) предположение, что каждая дата, которую они загружают в CSV, соответствует стандартам формата даты их страны, вы можете использовать API интернационализации. Должна быть технически возможность получить языковой стандарт этого конкретного пользователя, а затем загрузить правильные данные i18n (с соответствующим средством форматирования даты) и проанализировать файл с помощью средства форматирования, которое предоставляет вам i18n. Прочтите руководство Rails Internationalization API , чтобы получить представление о том, как можно использовать i18n API.

1
ответ дан 2 September 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: