TTimeZone v Delphi XE

vložil Radek Červinka 11. října 2010 01:13

Delphi XE obsahuje v RTL podporu pro práci s lokální časovou zónou (TTimeZone). Implementace je multiplatformní (Windows, Linux, Mac OS) a je jednoduše použitelná.

    1TTimeZone = class abstract
    2  private
    3    class var FLocal: TTimeZone;
    4    5  public
    6    function GetUtcOffset(const ADateTime: TDateTime; 
    7          const ForceDaylight: Boolean = False): TTimeSpan; inline;
    8    function ToUniversalTime(const ADateTime: TDateTime; 
    9          const ForceDaylight: Boolean = False): TDateTime; inline;
   10    function ToLocalTime(const ADateTime: TDateTime): TDateTime;
   11    function GetDisplayName(const ADateTime: TDateTime; 
   12          const ForceDaylight: Boolean = False): string;
   13    function GetAbbreviation(const ADateTime: TDateTime; 
   14          const ForceDaylight: Boolean = False): string;
   15    function GetLocalTimeType(const ADateTime: TDateTime): TLocalTimeType; inline;
   16    function IsStandardTime(const ADateTime: TDateTime; 
   17          const ForceDaylight: Boolean = False): Boolean;
   18    function IsInvalidTime(const ADateTime: TDateTime): Boolean; inline;
   19    function IsAmbiguousTime(const ADateTime: TDateTime): Boolean; inline;
   20    function IsDaylightTime(const ADateTime: TDateTime; 
   21          const ForceDaylight: Boolean = False): Boolean;
   22    property ID: string read DoGetID;
   23    property DisplayName: string read GetDisplayNameForNow;
   24    property Abbreviation: string read GetAbbreviationForNow;
   25    property UtcOffset: TTimeSpan read GetCurrentUtcOffset;
   26    class property Local: TTimeZone read FLocal;
   27  end;

Pro získání lokální časové zóny stačí jen napsat TTimeZone.Local, což ukáži na malém demu.

    1program Project1;
    2
    3{$APPTYPE CONSOLE}
    4
    5uses
    6  SysUtils, TypInfo,
    7  DateUtils;
    8begin
    9  with TTimeZone.Local do
   10  begin
   11    writeln('Now:', DatetimeToStr(Now));
   12    writeln('UtcOffset (h):', GetUtcOffset(Now).Hours);
   13    writeln('Now ToUniversalTime :', DatetimeToStr(ToUniversalTime(Now)));
   14    // zpatky ToLocalTime
   15    writeln('GetDisplayName:', GetDisplayName(Now));
   16    writeln(GetDisplayName(EncodeDate(2010, 12, 1)));
   17    writeln('GetAbbreviation:', GetAbbreviation(Now));
   18    writeln('Aktuální čas je (letni / standardni): ',
   19      GetEnumName(TypeInfo(TLocalTimeType), Ord(GetLocalTimeType(Now))));
   20    //lttStandard, lttDaylight, lttInvalid, lttAmbiguous
   21    writeln('IsStandardTime:', IsStandardTime(Now));
   22    writeln('IsDaylightTime:', IsDaylightTime(Now));
   23    writeln('TimeZoneID:', ID);
   24    writeln('DisplayName:', DisplayName);
   25  end;
   26end.

Výsledek běhu je následující:

Now:11.10.2010 0:07:28
UtcOffset (h):2
Now ToUniversalTime :10.10.2010 22:07:28
GetDisplayName:Střední Evropa (letní čas)
Střední Evropa (běžný čas)
GetAbbreviation:GMT+02
Aktuální čas je (letni / standardni): lttDaylight
IsStandardTime:FALSE
IsDaylightTime:TRUE
TimeZoneID:Střední Evropa (běžný čas)
DisplayName:Střední Evropa (letní čas)

Snad jediné místo, které není jasné na první pohled je konstrukce ohledně GetLocalTimeType, kde použiji RTTI pro zobrazení názvu položky výčtového typu. Tento typ určující, zde se jedná o letní (lttDaylight) nebo zimní čas (lttStandard), navíc trošku překvapivě obsahuje hodnotu lttAmbiguous, která specifikuje čas v přechodu mezi časy v chybějící hodině a lttInvalid.


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: ,

Novinky

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS