Формат | Диалект 3 DATE | Диалект 3 TIMESTAMP | DATE |
' CCYY-MM-DD' или 'YY-MM-DD' | Сохраняет только дату | Сохраняет дату и время в виде 00:00:00 | Сохраняет дату и время в.виде 00:00:00 |
'MM/DD/CCYY' или 'MM/DD/YY' | То же | То же | То же |
'DD.MM.CCYY' или 'DD.MM.YY' | То же | То же | То же |
' DD-MMM-CCYY' или 'DD-MMM-YY' | То же | То же | То же |
'DD,MMM,CCYY' или ' DD,MMM,YY' | То же | То же | То же |
'DD MMM CCYY' или 'DD MMM YY' | To же | То же | То же |
'DDMMMCCYY' или 'DDMMMYY' | To же | То же | То же |
В элементе MMM также допустимы полные английские названия месяцев, нечувствительные к регистру. Правильные названия приведены в табл. 10.3
'CCYY-MM-DD HH:NN:SS.nnnn' или 'YY-MM-DD HH:NN:SS.nnnn' (элемент ".nnnn" необязателен) | Сохраняет только дату; может потребовать преобразования для даты. Время не сохраняется | Сохраняет дату и время | Сохраняет дату и время |
'MM/DD/CCYYHH:NN:SS.nnnn' или 'MM/DD/YY HH:NN:SS.nnnn' | То же | То же | То же |
' DD.MM.CCYYHH:NN:SS.nnnn' или 'DD.MM.YY HH:NN:SS.nnnn' | То же | То же | То же |
'DD-MMM-CCYY HH:NN:SS.nnnn' или 'DD-MMMYY HH:NN:SS.nnnn' | То же | То же | То же |
Типы TIMESTAMP в диалекте 3 и DATE в диалекте 1 принимают дату и время в литерале даты. Литерал даты без времени будет сохранен и с временем в виде ' 00: 00: 00'.
Тип DATE в диалекте 3 принимает только дату. Тип данных TIME принимает только время.
"Скользящее окно века" в Firebird
Независимо от того, как представлена часть года в литерале DATE или TIMESTAMP, в виде CCYY или YY, Firebird всегда сохраняет полное значение года. Он обращается к алгоритму получения части cc (столетие). Он также всегда включает столетие при поиске типов даты. Клиентские приложения отвечают за отображение года в виде двух или четырех цифр.
Для получения столетия Firebird использует алгоритм скользящего окна. Задача заключается в интерпретации двухсимвольного значения года как ближайшего к текущему году в интервале предшествующих и последующих 50 лет.
Например, если текущий год 2004, то двухсимвольные значения года будут интерпретироваться, как показано в табл. 10.3.
Таблица 10.3. Определение года по двухсимвольному виду, если текущим является 2004 год
Двухсимвольный год | Полученный год | Рассчитывается как |
98 | 1998 | (2004 - 1998 = 6) < (2998 - 2004 = 94) |
00 | 2000 | (2004 - 2000 = 4) < (2100 - 2004 = 96) |
45 | 2045 | (2004 - 1945 = 55) > (2045 - 2004 = 41) |
50 | 2050 | (2004 - 1950 = 54) > (2050 - 2004 = 46) |
54 | 1954 | (2004 - 1954 = 50) = (2054 - 2004 = 50)* |
55 | 1955 | (2004 - 1955 = 49) < (2055 - 2004 = 51) |
* Кажущееся равенство в этом сравнении может ввести в заблуждение. 1954 год ближе к 2004, чем 2054, потому что все даты между 1954 и 1955 годами ближе к 2004, чем все даты между 2054 и 2055 годами.
Разделители в неамериканских датах
Ничто не вызывает больше затруднений для интернациональных пользователей, как ограничения в Firebird на использование наклонной черты (/) только для американского формата 'MM/DD/CCYY'. Хотя почти все другие страны используют формат 'DD/MM/CCYY', Firebird будет либо записывать неправильную дату, либо вызовет исключение для литерала даты, использующего соглашение 'DD/MM/CCYY'.
Например, литерал даты '12/01/2004' всегда будет сохраняться в смысле "1 декабря 2004 года", а '14/01/2004' вызовет исключение выхода за границы диапазона, потому что не существует месяца 14. Однако допускается 'CCYY/MM/DD': дата '2004/12/31' будет расшифровано как "31 декабря 2004 года".