ISO 8601/fi

From Free Pascal wiki

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


ISO 8601 on kansainvälisen standardisoimisjärjestön (ISO) antama päivämäärän ja kellonajan esitystapa. ISO 8601:n mukaan päivämäärä esitetään seuraavasti:

 YYYY-MM-DD

Missä YYYY on vuosi gregoriaanisen kalenterin aikana, MM on kuukausi 01 (tammikuu) ja 12 (joulukuu) väliltä ja DD on kuukauden päivä 01 ja 31 väliltä.

Aika tallennetaan:

 HH:MM:SS

jossa HH:lla merkitään tunteja keskiyön jälkeen 00:n ja 23:n välillä. MM tarkoittaa minuutteja edellisen tunnin alusta välillä 00 ja 59. SS on sekuntteja edellisen minuutin alusta välillä 00 ja 59.

Yhdistetty päivämäärä ja kellonaika erotetaan kirjaimella "T":

 YYYY-MM-DDTHH:MM:SS

Mutta usein välikirjain "T" voidaan korvata välilyönnillä.

Aikavyöhyke voidaan ilmaista merkitsemällä koordinoidun yleisajan (UTC) välinen aikaero seuraavasti:


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


Hyödyllisiä funktioita

Funktio Kuvaus Käännösyksikkö
DayOfTheMonth Antaa TDateTime-arvon kuukauden DateUtils
DayOfTheWeek Antaa TDateTime-arvon viikoittaisen päiväindeksin DateUtils
DayOfTheYear Antaa TDateTime-arvon päivän vuoden alusta DateUtils
FormatDateTime Antaa TDateTime-arvon merkkijonoesityksenä määritellyssä muodossa SysUtils
WeekOf Antaa TDateTime-arvon viikon numeron DateUtils

Esimerkki

program iso_8601_project;

Uses SysUtils,DateUtils;


// Yhdistetty päivämäärä ja kellonaika UTC esim. 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;

// Viikko esim. 2018-W39
function ISO8601_week(a_DateTime: TDateTime):string;
begin
  result := FormatDateTime('yyyy', a_DateTime)+'-W' +
    (WeekOf( a_DateTime )).ToString  ;
end;

//  Päivämäärä viikkonumerolla: esim. 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;

// Päivä vuoden alusta:  esim. 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.