Распечатать страницу

Функции для данных типа Date и DateTime в VFP

« Назад

Приведены в табл. 3.36.

Таблица. 36

Встроенные функции для данных типа Date и DateTime

Функция

Описание / примеры

BETWEEN(eTestValue,
                eLowValue,
                eHighValue)

Возвращает .T., если величина eTestValue расположена между значениями eLowValue и eHighValue, имеющими тот же тип, что и eTestValue, или равна одному из этих значений. В противном случае функция вернет .F.
Функция вернет NULL, если хотя бы один из параметров eLowValue или eHighValue есть NULL

CDOW(dExpression
               
| tExpression)

Возвращает название дня недели, соответствующего заданной дате или дате и времени. Тип результата – Character

? Cdow(Date( ))           && Возможный результат: Monday

CMONTH(dExpression
               
| tExpression)

Возвращает название месяца, соответствующего заданной дате или дате и времени. Тип результата – Character

? Cmonth(Date( ))      && Возможный результат: November

CTOD(cExpression)

Преобразовывает символьное представление даты в дату. Параметр cExpression должен вычисляться как допустимая дата от 01/01/0001 до 12/31/9999.
Формат отображения результата изменяется командами SET CENTURY, SET DATE и SET MARK
Замечание. Функция CTOD( ) может при некоторых вариантах задания cExpression возвращать неверные даты и генерировать при этом ошибки, если SET STRICTDATE установлен в 2. Чтобы избежать таких ситуаций, используйте DATE(nYear, nMonth, nDay)

? Ctod('12.31.2004')   && Напечатает: 12/31/04

CTOT(cExpression)

Преобразовывает символьное представление даты и времени в дату и время (в значение типа DateTime). Формат символьного представления даты и времени зависит от текущих установок, заданных по умолчанию или выполненных функциями SET CENTURY, SET DATE, SET HOURS и SET MARK.
Чтобы преобразовать дату и время в формате Access, SQL Server, Visual Studio .NET и XML, следует установить надлежащим образом SET DATE. Однако если прописная буква T присутствует в символьном представлении XML-даты, то VFP независимо от текущей установки SET DATE при выполнении CTOT( ) использует YMD. После выполнения функции текущая установка восстанавливается.
Замечания:
                1. Функция CTOT( ) может при некоторых вариантах задания cExpression возвращать неверные дату и время и генерировать при этом ошибки, если SET STRICTDATE установлен в 2. Чтобы избежать таких ситуаций, используйте DATETIME( ).
                2. Поскольку тип данных DateTime VFP не поддерживает миллисекунды и часовые пояса, то при преобразовании дат, представленных в формате, поддерживающем эти характеристики, будет происходить потеря точности

set date mdy

? Ctot('12/31/2004 11:59:59')

&& Напечатает: 12/31/04 11:59:59 AM

&&

&& Выполняются преобразования данных
&& в дату и время формата VFP,

&& Данные представлены в форматах разных источников

&& Во всех случаях преобразование выполняется

&& корректно без употребления SET DATE YMD
&&

&& Access 2000 XML формат даты (24-часовой)

? Ctot("2000–10–24T13:30:00")

&& SQL Server 2000 XML формат даты

&& DateTime (24-часовой)

? Ctot("2000–10–24T20:47:58.170")

&& Small DateTime (24-часовой)

? Ctot("2000–10–24T21:11:00

? Ctot("2000–10–03T02:02:02")

&& Visual Studio .NET XML

? Ctot("2002–10–05T04:04:04.0000000-07:00")

&& Simple Object Access Protocol (SOAP)

? Ctot("2001–09–14T07:00:00Z")

DATE([nYear,
                nMonth, nDay])

Возвращает текущую системную дату или дату, заданную необязательными параметрами nYear, nMonth и nDay, означающими соответственно год, месяц и день даты.
Значение nYear должно быть в диапазоне от 100 до 9999; nMonth – от 1 до 12; nDay – от 1 до 31.
 Любой NULL-параметр замещается системным значением.
Тип результата функции – Date.
Формат отображения результата изменяется командами SET CENTURY, SET DATE и SET MARK TO

? Date( )                        && Возможный результат: 12/16/04
set century on
set date to dmy
set mark to '.'
? Date(2005, 12, 29)                  && Напечатает: 29.12.2005
&& Возвращаемся к заданному по умолчанию разделителю
set mark to

DATETIME([nYear,
                nMonth, nDay
               
[, nHours
               
[, nMinutes
               
[, nSeconds]]]])

Возвращает текущие системные дату и время или дату и время, заданную необязательными параметрами nYear, nMonth, nDay, nHours, nMinutes и nSeconds, означающими соответственно год, месяц и день даты и час, минуту и секунду времени.
Значение nYear должно быть в диапазоне от 100 до 9999; nMonth – от 1 до 12; nDay – от 1 до 31; nHours – от 0 до 23; nMinutes и nSeconds – от 0 до 59.
Если параметр nHours (nMinutes, nSeconds) опущен, то соответствующий формальный параметр принимает значение 0.
Тип результата функции – DateTime.
Любой NULL-параметр даты замещается системным значением; NULL-параметр времени замещается 12:00:00.
Формат отображения результата изменяется командами SET CENTURY, SET DATE, SET MARK TO, SET HOURS и SET SECONDS

&&
&& Вычисляется число секунд до Нового года
&& Начало нового года
tNewYear = DateTime(Year(Date( )) + 1, 1, 1)
&& Текущие дата и время
tToday = DateTime( )
&& Число секунд до Нового года
nSecondsToNewYear = tNewYear – tToday
? "До Нового года осталось " +;
        Transform(nSecondsToNewYear) + " секунд"
&&
&& Формируем дату и время
set century off
set date mdy
? DateTime(2004, 12, 31, 11, 59, 59)
&& Напечатает: 12/31/04 11:59:59 AM

DAY(dExpression
               
tExpression)

Возвращает число из диапазона 1 – 31, равное дню месяца, содержащемуся в дате или дате и времени

DMY(dExpression
                | tExpression)

Возвращает строку, содержащую дату в формате ДД <название месяца> ГГ | ГГГГ. Число выводимых при отображении года цифр регулируется командой SET CENTURY

set century on

store {^2005-12-25} to someDate

? Dmy(someDate)      && Напечатает: 25 December 2005

set century off

? Dmy(someDate)      && Напечатает: 25 December 05

DOW(dExpression
               
tExpression

                [, nFirstDayOfWeek])

Возвращает число из диапазона 1 – 7, равное дню недели, содержащемуся в дате или дате и времени. Номер дня зависит от номера, установленного параметром nFirstDayOfWeek в качестве первого дня недели. Если параметр nFirstDayOfWeek опущен, то в качестве первого дня недели берется воскресенье. Параметр nFirstDayOfWeek может принимать следующие значения:

nFirstDayOfWeek

Первый день недели

0

Первый день недели берется из установки Week Starts, имеющейся на вкладке Regional диалогового окна Options или заданной командой SET FDOW

1

Воскресенье (по умолчанию)

2

Понедельник

3

Вторник

4

Среда

5

Четверг

6

Пятница

7

Суббота

store Date( ) to curentDate
&& Пусть текущая дата – 16 ноября 2004 г.
? curentDate                                             && 11/16/04
? Dow(curentDate, 2)                             && Напечатает: 2
? Cdow(curentDate)                               && Напечатает: Tuesday

DTOC(dExpression
               
| tExpression [, 1])

Возвращает символьное представление даты, отвечающее заданной дате или дате и времени. Если задан третий равный 1 параметр, то результат возвращается в виде, пригодном для индексирования с целью отображения записей в хронологическом порядка

store DateTime( ) to curentDateTime
&& Пусть текущие дата и время – это
&& 16 ноября 2004 г. 10 ч 23 мин 12 с
? curentDateTime                                   && 11/16/04 10:23:12 AM
? Dtoc(curentDateTime)                        && Напечатает: 11/16/04
? Dtoc(curentDateTime, 1)                    && Напечатает: 200041116

DTOS(dExpression
               
| tExpression)

Возвращает символьное представление даты, отвечающее заданной дате или дате и времени, в формате ГГГГММДД. Функция аналогична функции DTOC, вызванной с третьим равным 1 параметром. Функция полезна для индексирования таблиц по полям с данными типа Date или DateTime. На результат не оказывают влияние установки команд SET DATE и SET CENTURY

close databases
open database 'd:\HomeLibrary\HomeLibrary'
use Authors
&& Индексируем таблицу, используя выражение Dtos(InputDate)
&& Имя индексного файла – d:\AuthorsDate.idx
&& Отказываемся от предупреждений
set safety off
index on Dtos(InputDate) to d:\AuthorsDate
? Order( )                                      && Напечатает: AUTHORSDATE
&& Просматриваем всех авторов с датой большей someDate
store Dtos({^2000–01–01}) to someDate
scan for Dtos(InputDate) > someDate
       ? Author
endScan
&& Восстанавливаем режим выдачи предупреждений
set safety on

DTOT(dExpression)

Преобразовывает дату в дату и время, добавляя время полночи – 12:00:00 AM. Формат результата зависит от установок, выполняемых командами SET DATE и SET MARK

store Date( ) to curentDate

&& Пусть текущая дата – это 16 ноября 2004 г.

? curentDate                && Напечатает: 11/16/04

? Dtot(curentDate)      && Напечатает:11/16/04 12:00:00 AM

EMPTY(eExpression)

Возвращает .T., если выражение eExpression пустое, или .F. – в противном случае

? Empty(Ctod(""))                  && Напечатает: .T.

FDATE(cFileName
                [, nType])

Возвращает дату или дату и время последнего изменения файла, имеющего имя cFileName. Имя файла может включать путь. Если путь не указан, то VFP ищет файл в директории по умолчанию, а затем в директориях, заданных SET PATH.
Если nType = 0 или опущен, то функция вернет дату; если nType = 1, то функция вернет дату и время.
Чтобы узнать дату последнего обновления открытой таблицы используйте LUPDATE( )

FTIME(cFileName)

Возвращает строку, содержащую время последнего изменения файла, имеющего имя cFileName. Имя файла может включать путь. Если путь не указан, то VFP ищет файл в директории по умолчанию, а затем в директориях, заданных SET PATH

set century of
set date mdy
? Fdate("d:\a.txt")                      && Напечатает: 12/14/04
? Fdate("d:\a.txt", 1)                  && Напечатает: 12/14/04 11:43:46 AM
? Ftime("d:\a.txt")                      && Напечатает: 11:43:46 AM

GOMONTH(dExpression
               
| tExpression,

                nNumberOfMonths)

Возвращает дату, отстоящую от даты, заданной параметром dExpression типа Date или tExpression типа DateTime, на указанное параметром nNumberOfMonths число месяцев.
В случае нецелого параметра nNumberOfMonths функция использует целую часть его значения

store Date( ) to curentDate
&& Пусть текущая дата – это 17 ноября 2004 г.
? curentDate                                             && Напечатает: 11/17/04
? GoMonth(curentDate, 2)                    && Напечатает: 01/17/05
? GoMonth(curentDate, -3)                   && Напечатает: 08/17/04

HOUR(tExpression)

Возвращает по заданному значению tExpression типа DateTime, содержащиеся в нем число часов. Тип результата – Numeric

store {^2005–12–25 10:25:44 a} to someDateTime
? Hour(someDateTime)                  && Напечатает: 10

INLIST(eExpression1,
                eExpression2
                [, eExpression3 ...])

Возвращает .T., если параметр eExpression1 равен хотя бы одному из последующих параметров функции (которых может быть не более 24-х), или .F. – в противном случае

ISBLANK(eExpression)

Если eExpression – это поле с датой или датой и временем, то функция вернет .T., когда это поле принадлежит добавленной APPEND BLANK-записи, либо BLANK-очищенной записи

MAX(eExpression1,
                eExpression2
               
[, eExpression3 …])

Возвращает значение наибольшего параметра

MDY(dExpression
               
tExpression)

Возвращает дату, заданную параметром типа дата или дата и время, в которой месяц отображается прописью.
Формат результата <Месяц> ДД, ГГ | ГГГГ.
Число цифр в изображении года зависит от установки SET CENTURY

store {^2005–12–25 10:25:44 a} to someDateTime
? Mdy(someDateTime)                   && Напечатает: December 25, 05

MIN(eExpression1,
                eExpression2
               
[, eExpression3 …])

Возвращает значение наименьшего параметра

MINUTE(tExpression)

Возвращает по заданному значению tExpression типа DateTime, содержащееся в нем число минут. Тип результата – Numeric

store {^2005–12–25 10:25:44 a} to someDateTime
? Minute(someDateTime)              && Напечатает: 25

MONTH(dExpression
               
tExpression)

Возвращает номер месяца (число от 1 до 12) по заданному параметру типа дата или дата и время. Тип результата – Numeric

QUARTER(dExpression
                | tExpression
                [, nMonth])

Возвращает квартал года по заданному параметру типа дата или дата и время. Тип возвращаемого результата – Numeric.
Параметр nMonth задает месяц, используемый в качестве начала отсчета при вычислении квартала. Диапазон изменения nMonth от 1 до 12. На практике значение nMonth определяется по номеру месяца начала налогового периода.
Функция вернет 0, если первый параметр имеет пустое значение

? Quarter({^2005–12–31})                        && Напечатает: 4

SEC(tExpression)

Возвращает по заданному значению tExpression типа DateTime, содержащиеся в нем число секунд. Тип результата – Numeric

store {^2005–12–25 10:25:44 a} to someDateTime
? Sec(someDateTime)                     && Напечатает: 44

SECONDS( )

Возвращает число секунд, отсчитанных от полночи. Время вычисляется с точностью до миллисекунд, например:

? Seconds( )                       && Возможный результат: 62217.093

Тип результат – Numeric.
Функция пригодна, в том числе, и для точной оценки времени вычислений, например:

tStart = Seconds( )

<некоторые вычисления>

&& Время вычислений
calculationTime = tStart – Seconds( )

Если даты начала и окончания вычислений различны, то приведенная формула для calculationTime должна быть уточнена

SYS(2)

Возвращает число секунд, отсчитанных от полночи. Время вычисляется без миллисекунд. Тип результат – Character

TIME([nExpression])

Возвращает текущее системное время в 24-часовом формате чч:мм:сс; результат имеет тип Character. Если задан параметр nExpression, то результат указывается с точность до сотой доли секунды. Однако реальная точность – около 1/18 секунды.
Для получения большей точности используйте SECONDS( )

? Time( )           && Возможный результат: 18:46:44
? Time(1)                         && Возможный результат: 18:46:44.74

TTOC(dExpression
               
tExpression
               
[, 1 | 2 | 3])

Возвращает символьное представление даты и времени.
Если первый параметр содержит только время, то VFP добавляет к параметру дату по умолчанию – 12/30/1899; если не задано время, то VFP добавит к параметру время по умолчанию – 12:00:00 AM.
Если второй параметр равен 1, то результат возвращается в виде, пригодном для индексирования: результирующая строка содержит 14 символов в формате yyyymmddhhmmss и не зависит от текущих установок SET CENTURY и SET SECONDS.
Если второй параметр равен 2, то результат содержит только время. На вид результата влияют установки команд SET SECONDS и SET DATE.
Если второй параметр равен 3, то функция вернет 19-символьную строку yyyy-mm-ddThh:mm:ss, содержащую дату и время в формате XML. На результат не действуют установки команд SET CENTURY, SET HOURS и SET SECONDS.

store {^2005–12–25 10:25:44 a} to someDateTime
? Ttoc(someDateTime)                && Напечатает: 12/25/05 10:25:44 AM
? Ttoc(someDateTime, 1)            && Напечатает: 20051225102544
? Ttoc(someDateTime, 2)            && Напечатает: 10:25:44 AM
&&
&& Время не задано, в результате указывается время,
&& соответствующее полночи
store {^2005–12–25} to someDate
? Ttoc(someDate)                          && Напечатает: 12/25/05 12:00:00 AM

TTOD(tExpression)

Возвращает дату, содержащуюся в параметре типа DateTime. Если параметр tExpression содержит только время, то к нему будет добавлена дата по умолчанию – 12/30/1899

WEEK(dExpression
                | tExpression

                [, nFirstWeek]
                [, nFirstDayOfWeek])

Возвращает номер недели (число от 1 до 53) по заданному параметру типа дата или дата и время. Первая неделя года может начинаться в предшествующем году. Способ определения первой недели следующим образом регулируется параметром nFirstWeek:

nFirstWeek

Описание

0

Первая неделя года определяется в соответствии с заданным на закладке Regional диалогового окна Options значением First Week of Year. Значение First Week of Year может быть также установлено командой SET FWEEK

1

Первая неделя содержит дату 1 января. Этот критерий используется, если параметр nFirstWeek опущен

2

Первая неделя содержит в заданном первым параметром годе более 3-х дней

3

Все дни первой недели находятся в заданном первым параметром годе

Если параметр nFirstDayOfWeek опущен, то в качестве первого дня недели берется воскресенье. В противном случае первый день недели задается параметром nFirstDayOfWeek; действие параметра см. в описании функции DOW( )

store {^2005–12–25} to someDate
? Week(someDate)                          && Напечатает: 53

YEAR(dExpression
               
| tExpression)

Возвращает год, заданный датой dExpression или датой и временем tExpression. Тип результата – Numeric. Год всегда возвращается с указанием века: установки SET CENTURY на результат влияния не оказывают

store {^0005-–12–25} to someDate
? Year(someDate)                            && Напечатает: 5
? Year(Date( ))                                  && Возможный результат: 2005