ISO 8601/ru

From Free Pascal wiki
Jump to navigationJump to search

English (en) suomi (fi) русский (ru)

ISO 8601 - это стандарт, выпущенный Международной Организацией по Стандартизации (ISO) для даты и времени. Согласно ISO 8601, дата выглядит следующим образом:

 YYYY-MM-DD

, где YYYY - год по Григорианскому календарю, MM - месяц между 01 (январь) и 12 (декабрь), а DD - день месяца между 01 и 31.

Время записывается [как]:

 HH:MM:SS

, где HH являются часами после полуночи между 00 и 23. MM - минуты с начала предыдущего часа между 00 и 59. SS - секунды с начала предыдущей минуты между 00 и 59.

Объединенные дата и время должны быть помечены буквой "Т":

 YYYY-MM-DDTHH:MM:SS

Но часто промежуточную букву "T" можно заменить пробелом.

Часовой пояс можно указать, отметив разницу во времени между всемирным координированным временем (UTC) следующим образом:

 YYYY-MM-DDTHH:MM:SS±HH:MM


Полезные функции

Function Description Unit
DayOfTheMonth Возвращает индекс дня месяца для значения TDateTime DateUtils
DayOfTheWeek Возвращает индекс дня недели для значения TDateTime DateUtils
DayOfTheYear Возвращает день года для значения TDateTime DateUtils
FormatDateTime Возвращает строковое представление значения TDateTime с заданным форматом SysUtils
WeekOf Возвращает неделю года для значения TDateTime DateUtils

Примеры

program iso_8601_project;

Uses SysUtils,DateUtils;


// Объединение даты и времени в формате UTC, напр. // 2018-09-26T12:18:47Z
function  ISO8601_Combined_date_and_time_in_UTC(a_DateTime: TDateTime; a_Time_zone:string):string;
begin
  result := FormatDateTime( 'yyyy-mm-dd"T"hh:mm:ss', a_DateTime )+a_Time_zone;
end;

// Неделя: напр. 2018-W39
function ISO8601_week(a_DateTime: TDateTime):string;
begin
  result := FormatDateTime('yyyy', a_DateTime)+'-W' +
    (WeekOf( a_DateTime )).ToString  ;
end;

//  Дата с номером недели: напр.2018-W39-3
function ISO8601_Date_with_week_number(a_DateTime: TDateTime):string;
begin
  result := FormatDateTime('yyyy', a_DateTime)+'-W' +
    (WeekOf(a_DateTime)).ToString + '-' + (DayOfTheWeek(a_DateTime)).ToString ;
end;

// Порядковый номер дня в году: напр. 2018-269
function ISO8601_Ordinal_date(a_DateTime: TDateTime):string;
begin
  result := FormatDateTime('yyyy', a_DateTime)+ '-'
     + (DayOfTheYear( a_DateTime )).ToString ;
end;

var
  aDateTime: TDateTime;
begin
  aDateTime := now;
  WriteLn('Date: '+ FormatDateTime( 'yyyy-mm-dd', aDateTime ));  // 2018-09-26
  WriteLn('Combined date and time in UTC: ');
  WriteLn('  ' + ISO8601_Combined_date_and_time_in_UTC(aDateTime,'+00:00')); // 2018-09-26T12:18:47+00:00
  WriteLn('  ' +  FormatDateTime( 'yyyymmdd"T"hhmmss', aDateTime )+'Z'); // 20180926T121847Z
  Writeln('  ' + ISO8601_Combined_date_and_time_in_UTC(aDateTime,'Z')); //2018-09-26T12:18:47Z
  WriteLn('Week: '+ ISO8601_week(aDateTime) ); // 2018-W39
  WriteLn('Date with week number: '+ ISO8601_Date_with_week_number(aDateTime)); // 2018-W39-3
  WriteLn('Ordinal date: '+ ISO8601_Ordinal_date(aDateTime)); // 2018-269
  ReadLn;
end.