System/Docu/ru/Dates.odc

Dates

DEFINITION Dates;

	CONST
		monday = 0; tuesday = 1; wednesday = 2; thursday = 3; friday = 4; saturday = 5; sunday = 6;
		short = 0; long = 1; abbreviated = 2; plainLong = 3; plainAbbreviated = 4;

	TYPE
		Date = RECORD 
			year, month, day: INTEGER
		END;

		Time = RECORD 
			hour, minute, second: INTEGER
		END;

	PROCEDURE ValidDate (IN d: Date): BOOLEAN;
	PROCEDURE ValidTime (IN t: Time): BOOLEAN;
	PROCEDURE GetDate (OUT d: Date);
	PROCEDURE GetTime (OUT t: Time);
	PROCEDURE GetEasterDate (year: INTEGER; OUT d: Date);
	PROCEDURE DayOfWeek (IN d: Date): INTEGER;
	PROCEDURE Day (IN d: Date): INTEGER;
	PROCEDURE DayToDate (n: INTEGER; OUT d: Date);
	PROCEDURE DateToString (IN d: Date; format: INTEGER; OUT str: ARRAY OF CHAR);
	PROCEDURE TimeToString (IN t: Time; OUT str: ARRAY OF CHAR);

END Dates.


Модуль Dates предоставляет базовые процедуры для работы с датами. Они охватывают Юлианский календарь вплоть до 4.10.1582 и Грегорианский календарь начиная с 15.10.1582. Модуль Dates может работать с датами от 1.1.1 до 31.12.9999.
Типы Date и Time известны среде и могут отображаться соответствующими элементами управления.


CONST monday, tuesday, wednesday, thursday, friday, saturday, sunday
Возможные значения, возвращаемые процедурой DayOfWeek.

CONST short,  long, abbreviated, longPlain, abbreviatedPlain
Возможные значения для параметра format процедуры DateToString, задающие формат.


TYPE Date
Информация о дате.

year: INTEGER	0001 <= year <= 9999

month: INTEGER	1 <= month <= 12

day: INTEGER	1 <= day <= 31


TYPE Time
Информация о времени.

hour: INTEGER	0 <= hour <= 23

minute: INTEGER	0 <= minute <= 59

second: INTEGER	0 <= second <= 59


PROCEDURE  ValidDate (IN d: Date): BOOLEAN
Проверяет, является ли d правильной датой по Юлианскому (до 1582) или Грегорианскому (с 1582) календарю. Даты между 5.10.1582 и 14.10.1582 не существуют и не являются правильными.

PROCEDURE  ValidTime (IN t: Time): BOOLEAN
Проверяет, является ли t правильным временем.

PROCEUDRE GetDate (OUT d: Date)
Возвращает текущую дату.

PROCEDURE GetTime (OUT t: Time)
Возвращает текущее время.

PROCEDURE GetEasterDate (year: INTEGER; OUT d: Date)
Возвращает дату Пасхи в году year.

Предусловие
(year > 1582)  &  (year < 2300)	20

PROCEDURE DayOfWeek (IN d: Date): INTEGER
Возвращает день недели для даты d.

Предусловие
ValidDate(d)	(not explicitly checked)

Постусловие
result IN {monday .. sunday}

PROCEDURE  Day (d: Date): INTEGER;
Для даты d возвращает число дней, прошедших с 1.1.1. Day(1.1.1) = 1.
Промежуток между двумя датами в днях может быть расчитан как Day(d2) - Day(d1).

Предусловие
ValidDate(d)	(явно не проверяется)

Постусловие
(result > 0)  &  (result < 3652062)

PROCEDURE  DayToDate (n: INTEGER; OUT d: Date);
Переводит число дней с 1.1.1 в дату.
DayToDate(Day(d1), d2) => d1=d2

Предусловие
(n > 0)  &  (n < 3652062)	(явно не проверяется)

Постусловие
ValidDate(d) & Day(d) = n

PROCEDURE  DateToString (IN d: Date; format: INTEGER; OUT s: ARRAY OF CHAR);
Переводит дату d в строку s. Формат преобразования задается операционной системой, обычно в зависимости от страны и языка.

format	example
short	01/02/92
abbreviated	Thu, Jan 2, 1992
long	Thursday, January 2, 1992
plainAbbreviated	Jan 2, 1992
plainLong	January 2, 1992

Предусловие
ValidDate(d)	(явно не проверяется)
format IN {short, abbreviated, long, plainAbbreviated, longAbbreviated}	20

PROCEDURE TimeToString (IN t: Time; OUT s: ARRAY OF CHAR);
Переводит время t в строку s. Формат преобразования задается операционной системой.

Предусловие
ValidTime(t)	(явно не проверяется)