Aktuální čas si nejdříve uložíme do proměnné, takže se nám budou lépe porovnávat výsledky všech operací:
PS C:\> $d = Get-Date
PS C:\> $d
1. prosince 2008 23:34:19
PS C:\>
PS C:\> $d
1. prosince 2008 23:34:19
PS C:\>
Při základním použití operátoru -f dostaneme následující výstup:
PS C:\> "{0}" -f $d
1.12.2008 23:34:19
PS C:\> $d.GetTypeCode()
DateTime
1.12.2008 23:34:19
PS C:\> $d.GetTypeCode()
DateTime
Zároveň jsme si ověřili, že v proměnné d je uložen datový typ DateTime, takže můžeme začít provádět kouzla. Jestli se chcete podívat na různé varianty výstupu formátovacího operátoru, zkuste tento příkaz:
PS C:\> (Get-Date).GetDateTimeFormats()
Z minulého dílu víme, že obecný formát použití operátoru –f obsahuje také formátovací řetězec.
{index[,zarovnani][:formatovaciRetezec]}
formatovaciRetezec může v případě standardního formátování data nabývat osmnácti hodnot. Tyto hodnoty jsou zjednodušeně řečeno pouze aliasy pro uživatelský formát (definovaný systémem podle nastavení regionu). Pojďme si nejdříve ukázat všechny možnosti a poté je popíšeme podrobněji při současné lehké exkurzi do .NETu.
PS C:\> "{0:d}" -f $d
1.12.2008
PS C:\> "{0:D}" -f $d
1. prosince 2008
PS C:\> "{0:t}" -f $d
23:34
PS C:\> "{0:T}" -f $d
23:34:19
PS C:\> "{0:f}" -f $d
1. prosince 2008 23:34
PS C:\> "{0:F}" -f $d
1. prosince 2008 23:34:19
PS C:\> "{0:g}" -f $d
1.12.2008 23:34
PS C:\> "{0:G}" -f $d
1.12.2008 23:34:19
PS C:\> "{0:u}" -f $d
2008-12-01 23:34:19Z
PS C:\> "{0:U}" -f $d
1. prosince 2008 22:34:19
PS C:\> "{0:r}" -f $d
Mon, 01 Dec 2008 23:34:19 GMT
PS C:\> "{0:R}" -f $d
Mon, 01 Dec 2008 23:34:19 GMT
PS C:\> "{0:m}" -f $d
01 prosince
PS C:\> "{0:M}" -f $d
01 prosince
PS C:\> "{0:y}" -f $d
prosinec 2008
PS C:\> "{0:Y}" -f $d
prosinec 2008
PS C:\> "{0:s}" -f $d
2008-12-01T23:34:19
PS C:\> "{0:o}" -f $d
2008-12-01T23:34:19.8358768+01:00
1.12.2008
PS C:\> "{0:D}" -f $d
1. prosince 2008
PS C:\> "{0:t}" -f $d
23:34
PS C:\> "{0:T}" -f $d
23:34:19
PS C:\> "{0:f}" -f $d
1. prosince 2008 23:34
PS C:\> "{0:F}" -f $d
1. prosince 2008 23:34:19
PS C:\> "{0:g}" -f $d
1.12.2008 23:34
PS C:\> "{0:G}" -f $d
1.12.2008 23:34:19
PS C:\> "{0:u}" -f $d
2008-12-01 23:34:19Z
PS C:\> "{0:U}" -f $d
1. prosince 2008 22:34:19
PS C:\> "{0:r}" -f $d
Mon, 01 Dec 2008 23:34:19 GMT
PS C:\> "{0:R}" -f $d
Mon, 01 Dec 2008 23:34:19 GMT
PS C:\> "{0:m}" -f $d
01 prosince
PS C:\> "{0:M}" -f $d
01 prosince
PS C:\> "{0:y}" -f $d
prosinec 2008
PS C:\> "{0:Y}" -f $d
prosinec 2008
PS C:\> "{0:s}" -f $d
2008-12-01T23:34:19
PS C:\> "{0:o}" -f $d
2008-12-01T23:34:19.8358768+01:00
Jedna vlastnost je jasná na první pohled - PowerShell v případě operátoru -f rozlišuje velikost písmen! První a druhý příklad tedy nejsou rovnocenné. V prvním (0:d) zobrazujeme datum ve formátu ShortDate, ve druhém (0:D) je použit LongDate formát. Kde se tento formát bere – a jak je definován – si ukážeme později. Příklady jsou řazeny do dvojic a proto si každou projdeme společně:
- d, D - jak již bylo zmíněno, výstupem bude datum v krátkém (1.12.2008) nebo dlouhém formátu (1. prosince 2008)
- t, T - zobrazuje tentokrát čas, opět v krátkém (23:34) nebo dlouhém formátu (23:34:19)
- g, G - takzvaný obecný formát, je kombinací předchozích dvou formátů. Platí g = d t; G = d T
- f, F - datum a čas v úplném formátu, rozdíl je v zobracení času, čili matematicky: f = D t; F = D T
- u, U - univerzální setříditelný formát. U = F
- r, R - oba dávají stejný výsledek, datum v RFC1123 formátu
- m, M - zobrazuje den a měsíc, obě možnosti dávají shodný výsledek
- y, Y - formát pro zobrazení roku a měsíce, obě možnosti dávají shodný výsledek
- s - tříditelný formát
- o - round-trip formát (Microsoft neuvádí překlad anglického termínu, ale můžeme jej interně nazvat jako "ten nejpodrobnější" :)
- Jakýkoli jiný znak je brán jako neznámý a způsobí vyhození výjimky.
PS C:\> "{0:d}" -f $d
1.12.2008
1.12.2008
Jak již bylo řečeno, toto zobrazení používá krátký formát data. Anglicky řečeno, používá ShortDatePattern property. ShortDatePattern je jednou z vlastností .NET třídy DateTimeFormatInfo a každý systém ji definuje podle nastavení regionu. Jak zjistit naše nastavení? V PowerShellu existuje cmdlet Get-Culture, který nám s naším pátráním pomůže (výstup byl výrazně zkrácen).
PS C:\> Get-Culture | Get-Member
TypeName: System.Globalization.CultureInfo
DateTimeFormat Property System.Globalization.DateTimeFormatInfo DateTimeFormat
TypeName: System.Globalization.CultureInfo
DateTimeFormat Property System.Globalization.DateTimeFormatInfo DateTimeFormat
Vidíte typ DateTimeFormatInfo? Jsme evidentně na správné stopě. Zkusme se ještě trochu zanořit (opět zkráceno).
PS C:\> (Get-Culture).DateTimeFormat
ShortDatePattern : d.M.yyyy
ShortDatePattern : d.M.yyyy
A jsme téměř u cíle. ShortDatePattern je aliasem pro formát d.M.yyyy. Hmm, zajímavé, ale kde zjistíme, co znamená například yyyy? yyyy je jedním z dříve zmíněných uživatelských formátovacích řetězců, o kterých se budeme bavit příště. Nyní nám stačí informace že d. zobrazuje den ve tvaru 1. - M. zobrazuje měsíc ve tvaru 12. a yyyy rok jako 2008. Jaký formát je přiřazen konkrétnímu formátovacímu řetězci je možné najít v MSDN, ve zkratce se jedná o následující:
- d – ShortDatePattern
- D – LongDatePattern
- t – ShortTimePattern
- T – LongTimePattern
- F – FullDateTimePattern
- u – UniversalSortableDateTimePattern
- r, R - RFC1123Pattern
- m, M – MonthDayPattern
- y, Y – YearMonthPattern
- s – SortableDateTimePattern
FullDateTimePattern : d. MMMM yyyy H:mm:ss
LongDatePattern : d. MMMM yyyy
LongTimePattern : H:mm:ss
MonthDayPattern : dd MMMM
RFC1123Pattern : ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ShortDatePattern : d.M.yyyy
ShortTimePattern : H:mm
SortableDateTimePattern : yyyy'-'MM'-'dd'T'HH':'mm':'ss
UniversalSortableDateTimePattern : yyyy'-'MM'-'dd HH':'mm':'ss'Z'
YearMonthPattern : MMMM yyyy
LongDatePattern : d. MMMM yyyy
LongTimePattern : H:mm:ss
MonthDayPattern : dd MMMM
RFC1123Pattern : ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ShortDatePattern : d.M.yyyy
ShortTimePattern : H:mm
SortableDateTimePattern : yyyy'-'MM'-'dd'T'HH':'mm':'ss
UniversalSortableDateTimePattern : yyyy'-'MM'-'dd HH':'mm':'ss'Z'
YearMonthPattern : MMMM yyyy
Příště si povíme o uživatelských formátech a ukážeme si, co si představit například pod formátovacím řetězcem MM. Soubor s ukázkami dnešního dílu si můžete opět stáhnout.
Žádné komentáře:
Okomentovat