Каков наилучший способ определения форматов даты в пользовательских данных? - PullRequest
1 голос
/ 17 июля 2010

Я читаю данные csv, загруженные пользователями в моем приложении Ruby on Rails.Когда пользователь указывает, что у определенного столбца есть даты (или время), я хочу иметь возможность автоматически определять формат.Это означает, что он может быть в американском или британском форматах (любой из дд / мм / гг, мм / дд / гг, гггг-мм-дд, 12 февраля 2010 г. и т. Д.)но это не работает как для американских, так и для британских дат, если вы не укажете формат.Есть ли способ действительно сделать это правильно, или я прошу слишком много?Я не против назвать скрипт на другом языке только для этой задачи.Мне интересно, как это обрабатывается в таких программах, как Excel и Google Docs.

Ответы [ 2 ]

1 голос
/ 17 июля 2010

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

Если вы дадите программе дату, например 09/06/08, это может означать:

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

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

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

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

1 голос
/ 17 июля 2010

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

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

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

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

...