W komputerze czas jest przetrzymywany jako milisekundy, które upłynęło od północy 1 stycznia 1970. Jednak taka postać nie jest czytelna dla użytkowników, więc warto zapoznać się z klasą DateTime, która pozwoli sformatować czas do wybranej postaci.
Do przechowywania momentu w czasie rekomendowana jest klasa DateTime. Zawiera ona szereg różnych metod oraz konstruktorów, które ułatwiają pracę z datami oraz czasem. Przykładowo w celu pobrania aktualnego czasu należy wpisać:
Istnieje dodatkowo możliwość tworzenia czasu na podstawie konkretnej daty oraz czasu. Należy wtedy do konstruktora przekazać kolejno: rok, miesiąc, dzień, godzinę, minuty, sekundy i milisekundy. ELementy wyróżnione są obowiązkowe, a pozostałe opcjonalne, ale chcą podać minuty trzeba podać godziny itd. Oto przykład:
Najczęściej jednak data jest zapisana jako tekst. Pisanie specjalnych funkcji do wyodrębniania poszczególnych części daty np. roku może być bardzo czasłochłonne i stosowane do konkretnego zapisu daty. Klasa DateTime dostarcza specjalnej metody Parse, która konwertuje datę z łańcucha znakowego na moment w czasie.
Należy pamiętać, że może nastąpić wyjątek podczas konwersji daty!
Sposób wypisania daty określa się przy pomocy specyfikatora przekazywanego do metody formatującej tekst. W klasie DateTime zdefiniowano kilka metod do wykonania na obiekcie o działaniu identycznym do specyfikatorów, więc istnieje możliwość przeformatowania na tekst daty w jeden bądź drugi sposób. Poniżej została przedstawiona tabelka.
Typ | Specyfikator | Metoda | Przykładowy wynik |
---|---|---|---|
ShortTime | t | ToShortTimeString() | 12:34 |
ShortDate | d | ToShortDateString() | 14.05.2018 |
LongTime | T | ToLongTimeString() | 12:34:56 |
LongDate | D | ToLongDateString() | poniedziałek, 14 maja 2018 |
LongDate+ShortTime | f | poniedziałek, 14 maja 2018 12:34 | |
FullDateTime | F | poniedziałek, 14 maja 2018 12:34:56 | |
ShortDate+ShortTime | g | 14.05.2018 12:34 | |
ShortDate+LongTime | G | 14.05.2018 12:34:56 | |
MonthDay | m | 14 maja | |
YearMonth | y | maj 2018 | |
RFC1123 | r | Mon, 14 May 2018 12:34:56 GMT | |
SortableDateTime | s | 2018-05-14T12:34:56 GMT | |
UniversalSortableDateTime | u | ToUniversalTime() | 2018-05-14 12:34:56Z |
Przykładowo w celu wypisania sformatowanej daty bezpośrednio na konsolę w typie FullDateTime należy wpisać:
W przypadku metod nie istnieje metoda ToFullDateTime(), ale można to zrobić wywołując metody dotyczące date i czasu oddzielnie tak jak zostało przedstawione poniżej:
W języku pisanym najczęściej spotyka się kolejno dzień, miesiąc, rok rozdzielone kropką. Przykładowo "14.05.2018 r.". W przedstawionych wcześniej specyfikatorach nie ma możliwości wypisania daty w takim formacie, ale istnieje możliwość stworzenia własnego formatowania dostosowanego do naszych potrzeb. Informacje o tym zostały zebrane poniżej w tabelce.
Każdy ze specyfikatorów może występować kilka razy. W zależności od tego ile razy został on zapisany koło siebie to zmienia się sposób w jaki formatuje. Przykładowo "y" oraz "yy" zwróci dwie ostatnie cyfry roku, a "yyy" oraz "yyyy" pełny rok. Przykłady są podane dla daty 1 czerwca 2018 13:02:03.4500.
Typ | Opis | x | xx | xxx | xxxx |
---|---|---|---|---|---|
y | Rok | 18 | 18 | 2018 | 2018 |
M | Miesiąc | 6 | 06 | cze | czerwiec |
d | Dzień | 1 | 01 | Pt | piątek |
h | Godzina (12h) | 1 | 01 | - | - |
H | Godzina (24h) | 13 | 13 | - | - |
m | Minuta | 2 | 02 | - | - |
s | Sekunda | 3 | 03 | - | - |
f | Milisekundy | 4 | 45 | 450 | 4500 |
F | Milisekundy (bez 0) | 4 | 45 | 45 | 45 |
t | AM / PM | P | PM | - | - |
z | Strefa | +2 | +02 | +02:00 | - |
Wtedy przykładowo, żeby wypisać datę w formacie 01.06.2018 13:02 należałoby utworzyć następujący format:
W dołączonym pliku źródłowym znajdują się przykłady do wszystkich wymienionych w artykule formatów oraz przykład własnego formatu. Warto samemu spróbować wypisać datę w różnych formatach.
Wczytaj datę od użytkownika, a następnie wypisz następujące zdanie, które dla 2018-05-16 13:24:06.0500 brzmią następująco: