А даты бывают разные
Время - важнейшая характеристика нашего мира. С древних времен существовала проблема точного измерения времени. Люди придумали часы. Люди придумали календари. Причем календарей придумали несколько. И способов записи времени и дат придумали множество. Большая часть отсеялась вместе с «пескамивремени», но до сих пор в мире широко применяются несколько форматов записи времени и дат. Как правило, они привязаны к странам, в которых преимущественно используются.
В базах данных в записях таблиц поля, содержащие даты, встречаются оченьчасто. Даже если сама хранимая информация не требует привязки ко времени,вносят, например, дату заполнения записи или дату последней корректировки.
Программы при запуске, как правило, определяют текущую дату или припомощи пользователя, или самостоятельно, по системному времени. Эта датаиспользуется, например, чтобы записывать события, происходящие в приложении, в журнал. Часто в процессе работы программы организуют файл (обычно с. расширением .log), в который записываются важные этапы работы программы для того, чтобы, например, отследить в случае сбоя или «зависания»программы, какие действия выполнены, а какие нет. Это может помочь и восстановить утерянные данные, и отыскать ошибку в программе. Как правило,записи в таких log-файлах содержат дату и время, когда произошло описываемое событие. Какие же форматы записи дат поддерживает Visual FoxPro 9?
Форматы записи дат, поддерживаемые Visual FoxPro 9:
> AMERICAN - мм/дд/гг;
> ANSI - гг.мм.дд;
> BRITISH / FRANCH - дд/мм/гг;
> GERMAN - дд.мм.гг;
> ITALIAN - дц-мм-гг;
> JAPAN - гг/мм/дд;
> TAIWAN -.гг/мм/дд;
> USA - мм-дд-гг;
> MDY - мм/дд/гг;
> DMY - дд/мм/гг;
> YMD - гг/мм/дд;
> SHORT - определяется настройками формата короткой даты в Windows;
> LONG - определяется настройками формата длинной даты в Windows.
Здесь дд - день, мм - месяц, гг - год. По умолчанию устанавливается американский формат (AMERICAN). В России используется несколько другой формат записи дат. Он совпадает с форматом GERMAN. Как же установить желаемый формат? Для этого в Visual FoxPro 9 предусмотрена команда
Например:
Сделанная таким образом установка будет, к примеру, проявляться при отображении таблиц посредством команды BROWSE. Для любой переменной типадата будет подразумеваться именно такой формат.
А помните, сколько разговоров было о проблеме 2000 года? Предрекаличуть ли не конец света. Некоторые проблемы действительно были. И труженики информационных технологий накануне смены веков дорабатывали и тестировали программное обеспечение. В чем, собственно, была проблема?
Дело в том, что часто для экономии времени и места год записывался ихранился в виде двух цифр. Подразумевалось, что при четырехзначном представлении даты первые две цифры будут 19. Соответственно, при наступлении2000 года первое января запишется так - 01.01.00. А на самом деле что это задата - 01.01.2000 или 01.01.1900? Поэтому основная доработка программногообеспечения и баз данных состояла в корректном переводе хранимых дат вформат с четырехзначным годом. Коснулась эта проблема и файлов с таблицами. Несмотря на то что dbf-формат позволяет корректно работать с четырехзначным годом, некоторые версии распространенных программных средствнеправильно корректировали даты. Причем, пока год в дате отображался наэкране в виде двух знаков, проблема зачастую была даже не видна.
По умолчанию год в составе даты отображается именно двумя знаками. Какувидеть все четыре знака? Для этого существует команда SET CENTURY.
> ON - включает четырехзначное представление года;
> OFF - включает двухзначное представление года;
> ТО [<Век>] - устанавливает текущий век.
Если вы, например, выполните такую команду:
и введете, например, год 05 в датах двумя знаками, в итоге получите даты -2305.
Обычно в программах установки формата дат делают в самом начале программы. Например, так:
Без сомнения, при работе с базами данных не обойтись без полей, хранящих время. О типах таких полей мы уже говорили во второй главе.
Иногда полезно разбить дату на составляющие - выделить год, месяц, число. Иногда полезно для вывода на экран или в текстовый файл преобразоватьчисло в строку текста. Рассмотрим функции Visual FoxPro 9, позволяющие делать такое преобразование и еще некоторые нужные действия с датами и временем.
Функция DATE () возвращает значение текущей даты (системной даты, накоторую ориентируется операционная система вашего компьютера). Помните,что формат года в этой дате (двухзначный или четырехзначный) зависит оттого, выполнили ли вы команду SET CENTURY. Возвращаемое функцией DATE ()/Значение будет иметь тип даты. Например:
gd_SDate = DATE()
Следует помнить и то, что дата запишется в том формате, который вы установили посредством команды SET DATE ТО.
Кроме текущей даты может потребоваться узнать и текущее время. Это можно сделать, используя функцию Т1МЕ(). Эта функция возвращает символьноезначение.
Время записывается в переменную в формате ЧЧ:ММ:СС, где ЧЧ - часы,ММ - минуты, СС - секунды.
Если требуется получить и текущую дату и текущее время вместе, используйте функцию DATETIME(). Возвращаемое значение при этом будет типаDateTime.
Как выделить из даты отдельные компоненты?
Функция DAY (<Выражение>) возвращает число, выделенное из выражения.Выражение может быть типа Date или DateTime. В качестве выражения можно подставлять переменные или функции, например DATE () или DATETIME ().
Функция MONTH (<Выражение>) возвращает числовое значение месяца, выделенное из выражения. Выражение может быть типа Date или DateTime. В качестве выражения можно подставлять переменные или функции, напримерDATE () или DATETIME ( ).
Функция YEAR (<Выражение>) возвращает год, выделенный из выражения.Выражение может быть типа Date или DateTime. В качестве выражения можно подставлять неременные или функции, например DATE () или DATETIME ( ).
Функция HOUR (<Выражение>) возвращает час, выделенный из выражения.Выражение должно быть типа DateTime. В качестве выражения можно подставлять переменные или функции, например TIME (). Возвращаемое значениеможет быть от 1 до 24.
Функция MINUTE (<Выражение>) возвращает минуты, выделенные из выражения. Выражение должно быть типа DateTime. В качестве выражения можноподставлять переменные или функции, например Т1МЕ().
Функция SEC (<Выражение>) возвращает секунды, выделенные из выражения. Выражение должно быть типа DateTime. В качестве выражения можноподставлять переменные или функции, например Т1МЕ().
Некоторые команды для вывода данных на экран или в файл предпочитаютработать с символьными значениями. Как совершить быстрое преобразование? Visual FoxPro 9 предоставляет в ваше распоряжение несколько функцийпреобразования из одного типа данных в другой.
DTOC (<Выражение>) - преобразует выражение в формате Date или DateTimeв символьное выражение.
CTOD(<Выражение>) - преобразует символьное выражение в выражение вформате Date.
СТОТ (<Выражение>) - преобразует символьное выражение в выражение вформате DateTime.
TTOD (<Выражение>) - преобразует выражение в формате DateTime в выражение в формате Date.
DTOT (<Выражение>) - преобразует выражение в формате Date в выражениев формате DateTime.
Проиллюстрируем использование функций для работы с датами на практическом примере. Создадим функцию проверки корректности введеннойпользователем даты. Допустим, что введенная пользователем дата передается нашей функции в виде параметра. Будем возвращать Тгие(.Т.), если проверка прошла успешно, и False(.K), если дата не удовлетворяет нашим условиям. Кроме того, будем выводить сообщение, если дата не верпа. Условия дляпроверки примем следующие:
> дата должна быть текущей или более ранней;
> год должен быть больше 2000.
1. Смените текущую папку, выполнив в окне Command команду
CD ?
2. Откроется окно, в котором нужно найти созданную нами ранее папкуexample.
3. Выберите из меню File (Файл) команду New (Новый) или щелкните мышью по кнопкена панели инструментов Стандартная. Откроется окно,представленное на рис. 3.1. Выберите пункт Program (Программа), а затем щелкните мышью по кнопке New file (Новый файл). Откроется пустое окно, предназначенное для ввода текста программы.
4. Введите следующий ниже текст функции:
5. Сохраните программу в файле, для чего выб< ритс в меню File (Файл) команду Save (Сохранить) или щелкните по кнопкена панели инструментов Стандартная. В результате откроется стандартное окно сохранениядокумента, где тип файла уже будет указан, а от вас потребуется указать имяфайла. Назовем наш файл с программой ALVDateTest. Щелкните мышью вполе Save Document (Сохранить документ) и введите ALVDateTest. Послеэтого щелкните мышью по кнопке Сохранить (Save).
6. В окне Command введите команды:
7. В результате появится окно с сообщением о том, что введена дата больше текущей. Это произошло, потому что мы указали в качестве аргумента функции функцию DATE (), которая возвращает текущую дату, и прибавили к ней еще один день, то есть получилась завтрашняя дата. Щелкнитепо кнопке ОК.