Daty, godziny i strefy czasowe
Platforma .NET udostępnia typy reprezentujące daty, godziny i strefy czasowe. W tym artykule opisano te typy.
Oprócz podstawowej struktury DateTime platforma .NET udostępnia następujące klasy, które obsługują pracę ze strefami czasowymi:
-
Ta klasa służy do pracy z dowolną strefą czasową, która jest wstępnie zdefiniowana w systemie, w celu utworzenia nowych stref czasowych oraz łatwego konwertowania dat i godzin z jednej strefy czasowej na inną. W przypadku nowego programowania użyj klasy TimeZoneInfo zamiast klasy TimeZone.
-
Ta struktura służy do pracy z datami i godzinami, których przesunięcie (lub różnica) od UTC jest znane. Struktura DateTimeOffset łączy wartość daty i godziny z przesunięciem względem UTC. Ze względu na relację z utc pojedyncza wartość daty i godziny jednoznacznie identyfikuje pojedynczy punkt w czasie. Dzięki temu wartość DateTimeOffset jest bardziej przenośna z jednego komputera na inny niż wartość DateTime.
Następujące klasy do obsługi pracy z czasem:
-
Ta struktura służy do przedstawiania przedziału czasu, takiego jak czas, który upłynął lub różnica między dwiema datami.
-
Ta struktura służy do reprezentowania godziny bez daty. Czas reprezentuje godziny, minuty i sekundy nieokreśliwnego dnia.
TimeOnly
ma zakres00:00:00.0000000
do23:59:59.9999999
. Ten typ może służyć do zastępowaniaDateTime
iTimeSpan
typów w kodzie, gdy użyto tych typów do reprezentowania czasu. Aby uzyskać więcej informacji, zobacz Jak używać struktur DateOnly i TimeOnly.Ważny
TimeOnly nie jest dostępna dla programu .NET Framework.
-
Jest to klasa podstawowa, która zapewnia abstrakcję czasu. Typowym sposobem sprawdzenia bieżącej godziny jest użycie
DateTime.UtcNow
lubDateTimeOffset.UtcNow
. Jednak te typy nie zapewniają żadnej kontroli nad tym, co jest uważane za "teraz". Dlaczego chcesz to kontrolować? Możliwość testowania. Rozważmy na przykład napisanie aplikacji do śledzenia zdarzeń, która dostarcza przypomnienia 1 dzień przed wydarzeniem. Logika aplikacji polega na sprawdzaniu czasu zdarzenia co godzinę i zgłaszaniu alertu użytkownikowi po upływie 24 godzin przed zdarzeniem. Podczas pisania testów dla aplikacji należy podać własny typ, który opakowujeDateTimeOffset.UtcNow
do testowania tej logiki, ale teraz platforma .NET udostępnia tę klasę abstrakcji.Aby uzyskać więcej informacji, zobacz What is TimeProvider.
Typ
TimeProvider
jest uwzględniony na platformie .NET.W przypadku programów .NET Framework i .NET Standard
TimeProvider
jest dostarczany przez Microsoft.Bcl.TimeProvider pakiet NuGet.
Następujące klasy do wspomagania pracy z datami:
-
Użyj tej struktury podczas pracy z wartością, która reprezentuje tylko datę. Data reprezentuje cały dzień od początku dnia do końca.
DateOnly
ma zakres od0001-01-01
do9999-12-31
. Ten typ reprezentuje kombinację miesiąca, dnia i roku bez określonego czasu. Jeśli wcześniej używałeś typuDateTime
w kodzie do reprezentowania daty, która ignoruje godzinę, zastąp go tym typem. Aby uzyskać więcej informacji, zobacz Jak używać struktur DateOnly i TimeOnly.Ważny
DateOnly nie jest dostępna dla programu .NET Framework.
W następnej sekcji przedstawiono informacje potrzebne do pracy ze strefami czasowymi oraz tworzenie aplikacji obsługujących strefy czasowe, które mogą konwertować daty i godziny z jednej strefy czasowej na inną.
W tej sekcji
omówienie strefy czasowej
Omówienie terminologii, pojęć i problemów związanych z tworzeniem aplikacji obsługujących strefy czasowe.
wybieranie między elementami DateTime, DateTimeOffset, TimeSpan i TimeZoneInfo
Omówiono, kiedy używać typów DateTime, DateTimeOffseti TimeZoneInfo podczas pracy z danymi daty i godziny.
Znajdowanie stref czasowych zdefiniowanych w systemie lokalnym
Opisuje sposób wyliczania stref czasowych znalezionych w systemie lokalnym.
Instrukcje: wyliczanie stref czasowych znajdujących się na komputerze
Zawiera przykłady, które wyliczają strefy czasowe zdefiniowane w rejestrze komputera i umożliwiają użytkownikom wybranie wstępnie zdefiniowanej strefy czasowej z listy.
Jak uzyskać dostęp do wstępnie zdefiniowanych obiektów czasu UTC i lokalnego
Opisuje sposób uzyskiwania dostępu do uniwersalnego czasu koordynowanego i lokalnej strefy czasowej.
Jak utworzyć obiekt TimeZoneInfo
Opisuje sposób tworzenia wystąpienia obiektu TimeZoneInfo z rejestru systemu lokalnego.
Tworzenie obiektu DateTimeOffset
Omówienie metod instancjonowania obiektów DateTimeOffset oraz metod konwersji wartości DateTime na wartość DateTimeOffset.
Instrukcje: tworzenie stref czasowych bez reguł korekty
Opisuje sposób tworzenia niestandardowej strefy czasowej, która nie obsługuje przejścia do i z czasu letniego.
Instrukcje: tworzenie stref czasowych przy użyciu reguł korekty
Opisuje sposób tworzenia niestandardowej strefy czasowej obsługującej co najmniej jedno przejście do i z czasu letniego.
zapisywanie i przywracanie stref czasowych
Opisuje TimeZoneInfo obsługę serializacji i deserializacji danych strefy czasowej oraz ilustruje niektóre scenariusze, w których te funkcje mogą być używane.
Jak zapisać strefy czasowe w osadzonym zasobie
Opisuje sposób tworzenia niestandardowej strefy czasowej i zapisywania informacji w pliku zasobu.
Instrukcje: przywracanie stref czasowych z osadzonego zasobu
Opisuje, jak tworzyć wystąpienia niestandardowych stref czasowych, które zostały zapisane w osadzonym pliku zasobów.
Wykonywanie operacji arytmetycznych z datami i godzinami
Omówienie problemów związanych z dodawaniem, odjęciem i porównywaniem wartości DateTime i DateTimeOffset.
Instrukcje: używanie stref czasowych w arytmetyce daty i godziny
Omówiono sposób wykonywania arytmetyki daty i godziny odzwierciedlających reguły korekty strefy czasowej.
Konwertowanie między wartościami DateTime i DateTimeOffset
Opisuje sposób konwertowania między wartościami DateTime i DateTimeOffset.
Konwersja czasów między strefami czasowymi
Opisuje sposób konwertowania czasu z jednej strefy czasowej na inną.
Instrukcje: rozwiązywanie niejednoznacznych czasów
Opisuje sposób rozwiązywania niejednoznacznego czasu przez przypisanie go do standardowego czasu strefy czasowej.
Jak pozwolić użytkownikom rozwiązywać niejednoznaczne godziny
Opisuje, jak umożliwić użytkownikowi określenie mapowania między niejednoznacznym czasem lokalnym a uniwersalnym czasem koordynowanym.