PostgreSQL. Date/Time Types

Krisha

pain in the neck
PostgreSQL. Date/Time Types

В мане имеем рекомендованную форму ввода даты:
1999-01-08 ISO 8601; January 8 in any mode (recommended format).

Дело в том, что даты у меня приходят из CSV файла и там они могут быть записаны в каком угодно формате, я искуственно ограничиваю возможности до трех:

1.1 - 02.03.2004
1.2 - 02.03.04

2.1 - 02-03-2004
2.2 - 02-03-04

3.1 - 02/03/2004
3.2 - 02/03/04

Возникает вопрос, поймет ли pg такую запись: 04-02-03, то есть когда в первой позиции год представлен только двумя числами ? И если не поймет, то что бы вы порекомендовали делать, чтобы в конечном итоге в базу вставлялись валидные даты ?

Спасибо.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Код:
library=# create table testdate (foo date);
CREATE TABLE
library=# insert into testdate values ('04-03-02');
INSERT 176728 1
library=# select * from testdate ;
    foo     
------------
 2002-04-03
(1 row)
мораль: обрабатывай свой CSV, чтобы даты там были однозначно определимы.
 

Krisha

pain in the neck
Опля, значит при такой записи он последнюю позицию конвертит в год. Осталось выяснить что есть для него первая позиция и вторая.
 

YRusinov

Филин Ух
Это зависит от того, какой установлен формат отображения даты: европейский (день-месяц-год) или американский (месяц-день-год).
 

Krisha

pain in the neck
Автор оригинала: Sad Spirit
мораль: обрабатывай свой CSV, чтобы даты там были однозначно определимы.
Не мог бы ты подсказать, как обрабатывать уже готовый CSV файл, чтобы даты там были однозначно определимы ?

-~{}~ 12.05.04 13:30:

YRusinov
Спасибо, что навел на мысль, помогло SHOW DateStyle;
Код:
              DateStyle
---------------------------------------
 ISO with US (NonEuropean) conventions
(1 row)
-~{}~ 12.05.04 13:31:

Как я правильно понял NonEuropean US Usa - mm/dd/yyyy
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Krisha
Не мог бы ты подсказать, как обрабатывать уже готовый CSV файл, чтобы даты там были однозначно определимы ?
Засасывать его в PHP скрипт, который будет его парсить и приводить даты к виду ISO 8601

Ссылка в тему: http://cvs.php.net/co.php/pear/File/File/CSV.php?r=1.13
 

Krisha

pain in the neck
Автор оригинала: Sad Spirit
Засасывать его в PHP скрипт, который будет его парсить и приводить даты к виду ISO 8601
Я уже это сделал, интрересует именно как приводить даты к виду ISO 8601 с учетом того, что заранее я не знаю в каком формате мне пришла дата.
 

Krisha

pain in the neck
Сеёчас делаю просто вот так:
PHP:
if (strtotime($value) != -1) {
   $date = date("Y-m-d", strtotime($value));
}
Вот думаю, какие могут тут быть подводные камни...

-~{}~ 12.05.04 14:57:

Sad Spirit
Да, именно прикол в том, что я не только не знаю где день, месяц и год, но еще и не факт, что дата не будет так прописана: 15 May, 99 к примеру...

-~{}~ 12.05.04 14:59:

Файлик будет создавать ручками и аплоадить секретарь клиентской фирмы, так что наворотить он(а) в этом файлике может что угодно. Единственный вариант какой я вижу тупо сотрировать те строки, которые прошли валидатор и те которые не прошли и отображать их списком, вот тут у вас ошибки,а вот это можем запихнуть в базу...
 
Сверху