Strona główna » Kursy » Kurs C# » Czas
 

Czas

Wstęp

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.

Implementacja

Utworzenie daty

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ć:

  1. DateTime teraz = DateTime.Now;

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:

  1. DateTime datan = new DateTime(2018, 5, 14, 12, 34, 56, 789);

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.

  1. DateTime datap = DateTime.Parse("2018-06-01 13:02:03.4500");

Należy pamiętać, że może nastąpić wyjątek podczas konwersji daty!

Wypisywanie 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.

TypSpecyfikatorMetodaPrzykładowy wynik
ShortTimetToShortTimeString()12:34
ShortDatedToShortDateString()14.05.2018
LongTimeTToLongTimeString()12:34:56
LongDateDToLongDateString()poniedziałek, 14 maja 2018
LongDate+ShortTimef poniedziałek, 14 maja 2018 12:34
FullDateTimeF poniedziałek, 14 maja 2018 12:34:56
ShortDate+ShortTimeg 14.05.2018 12:34
ShortDate+LongTimeG 14.05.2018 12:34:56
MonthDaym 14 maja
YearMonthy maj 2018
RFC1123r Mon, 14 May 2018 12:34:56 GMT
SortableDateTimes 2018-05-14T12:34:56 GMT
UniversalSortableDateTimeuToUniversalTime()2018-05-14 12:34:56Z

Przykładowo w celu wypisania sformatowanej daty bezpośrednio na konsolę w typie FullDateTime należy wpisać:

  1. Console.WriteLine("[F] {0:F}", datan);

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:

  1. Console.WriteLine("{0} {1}", datan.ToLongDateString(), datan.ToLongTimeString());

Własny format

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.

TypOpisxxxxxxxxxx
yRok181820182018
MMiesiąc606czeczerwiec
dDzień101Ptpiątek
hGodzina (12h)101--
HGodzina (24h)1313--
mMinuta202--
sSekunda303--
fMilisekundy4454504500
FMilisekundy (bez 0)4454545
tAM / PMPPM--
zStrefa+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:

  1. Console.WriteLine("Przykład: {0:dd.MM.yyyy HH:mm}", datap);

Podsumowanie

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.

Zadania

Zadanie 1

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:

  1. Czas w systemie 24h to np. 13:24, a w 12h np. 01:34 PM.
  2. Skrótowo środa to Śr.
  3. Milisekundy można zapisywać z dodatkowymi zerami np. 0500 lub bez 05.
  4. Data wprowadzona przez użytkownika to 16.05.2018 r. 13:24:06.