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.

Tagy: ,

Novinky

Přidat komentář





  • Komentář
  • Náhled
Loading



Naše nabídka

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj 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 a Win64 (a Mac OSX, s výhledem na iPhone a Android díky FireMonkey) na současném trhu (včetně Windows 7).

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.

Burza delfínů nabízí pracovní možnosti pro programátory v Delphi.

Anketa

Poslední komentáře

Comment RSS