DateTime Struktura
TOC
Zwiń spis treści
Rozwiń spis treści
Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Struktura DateTime

.NET Framework (current version)
 

Reprezentuje moment w czasie, zwykle wyrażona jako datę i godzinę.

Aby przeglądać kod źródłowy .NET Framework dla tego typu, zobacz Reference Source.

Przestrzeń nazw:   System
Zestaw:  mscorlib (w mscorlib.dll)

[SerializableAttribute]
public struct DateTime : IComparable, IFormattable, IConvertible, 
	ISerializable, IComparable<DateTime>, IEquatable<DateTime>

NazwaOpis
System_CAPS_pubmethodDateTime(Int32, Int32, Int32)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc i dzień.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Calendar)

Inicjuje nowe wystąpienie DateTime określony rok, miesiąc i dzień w kalendarzu określonej struktury.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, godziny, minuty i sekundy.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, godzinę, minutę i sekundę dla określonego kalendarza.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, dzień, godzinę, minuty, sekundy i uniwersalny czas koordynowany (UTC) lub czasu lokalnego.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, dzień, godzinę, minuty, sekundy i milisekund.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, dzień, godziny, minuty, sekundy i milisekundy dla określonego kalendarza.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, dzień, godzina, minuty, sekundy, milisekund i uniwersalny czas koordynowany (UTC) lub czas lokalny dla określonego kalendarza.

System_CAPS_pubmethodDateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Inicjuje nowe wystąpienie DateTime struktury określony rok, miesiąc, dzień, godzinę, minuty, sekundy, milisekund i uniwersalny czas koordynowany (UTC) lub czasu lokalnego.

System_CAPS_pubmethodDateTime(Int64)

Inicjuje nowe wystąpienie DateTime struktury do określonej liczby znaczników.

System_CAPS_pubmethodDateTime(Int64, DateTimeKind)

Inicjuje nowe wystąpienie DateTime struktury określoną liczbę znaczników i uniwersalny czas koordynowany (UTC) lub czasu lokalnego.

NazwaOpis
System_CAPS_pubpropertyDate

Pobiera składnik daty tego wystąpienia.

System_CAPS_pubpropertyDay

Pobiera dzień miesiąca, reprezentowany przez to wystąpienie.

System_CAPS_pubpropertyDayOfWeek

Pobiera dnia tygodnia reprezentowany przez to wystąpienie.

System_CAPS_pubpropertyDayOfYear

Pobiera dzień roku, reprezentowane przez to wystąpienie.

System_CAPS_pubpropertyHour

Pobiera składnik godziny z datę reprezentowaną przez to wystąpienie.

System_CAPS_pubpropertyKind

Pobiera wartość wskazującą, czy godzina reprezentowana przez to wystąpienie jest oparty na czas lokalny, uniwersalny czas koordynowany (UTC) lub nie.

System_CAPS_pubpropertyMillisecond

Pobiera składnik milisekund daty reprezentowane przez to wystąpienie.

System_CAPS_pubpropertyMinute

Pobiera składnik minuty datę reprezentowaną przez to wystąpienie.

System_CAPS_pubpropertyMonth

Pobiera składnik miesiąca o dacie reprezentowane przez to wystąpienie.

System_CAPS_pubpropertySystem_CAPS_staticNow

Pobiera DateTime obiekt, który jest ustawiona na bieżącą datę i godzinę na tym komputerze, który jest wyrażona jako czas lokalny.

System_CAPS_pubpropertySecond

Pobiera składnik sekund o dacie reprezentowane przez to wystąpienie.

System_CAPS_pubpropertyTicks

Pobiera liczbę znaczników, które reprezentują daty i godziny tego wystąpienia.

System_CAPS_pubpropertyTimeOfDay

Pobiera godzinę dla tego wystąpienia.

System_CAPS_pubpropertySystem_CAPS_staticToday

Pobiera bieżącą datę.

System_CAPS_pubpropertySystem_CAPS_staticUtcNow

Pobiera DateTime obiekt, który jest ustawiona na bieżącą datę i godzinę na tym komputerze, wyrażony jako uniwersalny czas koordynowany (UTC).

System_CAPS_pubpropertyYear

Pobiera składnik roku z daty, reprezentowany przez to wystąpienie.

NazwaOpis
System_CAPS_pubmethodAdd(TimeSpan)

Zwraca nowy DateTime który dodaje wartość określonego TimeSpan wartość tego wystąpienia.

System_CAPS_pubmethodAddDays(Double)

Zwraca nowy DateTime który dodaje określoną liczbę dni do wartości tego wystąpienia.

System_CAPS_pubmethodAddHours(Double)

Zwraca nowy DateTime który dodaje określoną liczbę godzin wartość tego wystąpienia.

System_CAPS_pubmethodAddMilliseconds(Double)

Zwraca nowy DateTime który dodaje określoną liczbę milisekund do wartość tego wystąpienia.

System_CAPS_pubmethodAddMinutes(Double)

Zwraca nowy DateTime który dodaje określoną liczbę minut wartość tego wystąpienia.

System_CAPS_pubmethodAddMonths(Int32)

Zwraca nowy DateTime który dodaje określoną liczbę miesięcy do wartości tego wystąpienia.

System_CAPS_pubmethodAddSeconds(Double)

Zwraca nowy DateTime który dodaje określoną liczbę sekund wartość tego wystąpienia.

System_CAPS_pubmethodAddTicks(Int64)

Zwraca nowy DateTime który dodaje określoną liczbę znaczników do wartość tego wystąpienia.

System_CAPS_pubmethodAddYears(Int32)

Zwraca nowy DateTime który dodaje określoną liczbę lat do wartości tego wystąpienia.

System_CAPS_pubmethodSystem_CAPS_staticCompare(DateTime, DateTime)

Porównuje dwa wystąpienia DateTime i zwraca liczbę całkowitą, która wskazuje, czy pierwsze wystąpienie jest wcześniejsza niż takie same jak lub później niż drugie wystąpienie.

System_CAPS_pubmethodCompareTo(DateTime)

Porównuje wartość tego wystąpienia określony DateTime wartości i zwraca liczbę całkowitą, która wskazuje, czy to wystąpienie jest wcześniejsza niż takie same jak lub nowszy niż określona DateTime wartość.

System_CAPS_pubmethodCompareTo(Object)

Porównuje wartość tego wystąpienia do określonego obiektu, który zawiera określonego DateTime wartości i zwraca liczbę całkowitą, która wskazuje, czy to wystąpienie jest wcześniejsza niż takie same jak lub nowszy niż określona DateTime wartość.

System_CAPS_pubmethodSystem_CAPS_staticDaysInMonth(Int32, Int32)

Zwraca liczbę dni w określonym miesiącu i roku.

System_CAPS_pubmethodEquals(DateTime)

Zwraca wartość wskazującą, czy wartość tego wystąpienia jest równa określonej wartości DateTime wystąpienia.

System_CAPS_pubmethodSystem_CAPS_staticEquals(DateTime, DateTime)

Zwraca wartość wskazującą, czy dwa DateTime wystąpienia mają tę samą wartość daty i godziny.

System_CAPS_pubmethodEquals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.(Przesłania ValueType.Equals(Object)).

System_CAPS_pubmethodSystem_CAPS_staticFromBinary(Int64)

Deserializuje wartość binarną 64-bitowych i odtwarza oryginał, szeregowane DateTime obiektu.

System_CAPS_pubmethodSystem_CAPS_staticFromFileTime(Int64)

Konwertuje określony czas pliku systemu Windows równoważne czasu lokalnego.

System_CAPS_pubmethodSystem_CAPS_staticFromFileTimeUtc(Int64)

Konwertuje określony czas pliku systemu Windows na odpowiedni czas UTC.

System_CAPS_pubmethodSystem_CAPS_staticFromOADate(Double)

Zwraca DateTime odpowiadającą określonej OLE automatyzacji daty.

System_CAPS_pubmethodGetDateTimeFormats()

Konwertuje wartość tego wystąpienia reprezentacji ciągu obsługiwane przez standardowy format daty i godziny specyfikatorów formatu.

System_CAPS_pubmethodGetDateTimeFormats(Char)

Konwertuje wartość tego wystąpienia reprezentacji ciągu obsługiwane przez określoną datą standardowego i specyfikator formatu godziny.

System_CAPS_pubmethodGetDateTimeFormats(Char, IFormatProvider)

Konwertuje wartość tego wystąpienia reprezentacji ciągu obsługiwane przez określoną datą standardowego i specyfikator formatu godziny i informacje o formatowaniu specyficzne dla kultury.

System_CAPS_pubmethodGetDateTimeFormats(IFormatProvider)

Konwertuje wartość tego wystąpienia reprezentacji ciągu obsługiwane przez standardowa Data i godzina specyfikatorów formatu i określone informacje o formatowaniu specyficzne dla kultury.

System_CAPS_pubmethodGetHashCode()

Zwraca tablicę skrótu dla tego wystąpienia. (Przesłania ValueType.GetHashCode()).

System_CAPS_pubmethodGetType()

Pobiera Type bieżącego wystąpienia.(Odziedziczone po: Object.)

System_CAPS_pubmethodGetTypeCode()

Zwraca TypeCode dla typu wartości DateTime.

System_CAPS_pubmethodIsDaylightSavingTime()

Wskazuje, czy to wystąpienie DateTime w zakresie czasu dla bieżącej strefy czasowej.

System_CAPS_pubmethodSystem_CAPS_staticIsLeapYear(Int32)

Zwraca wartość wskazuje, czy określony rok jest rokiem przestępnym.

System_CAPS_pubmethodSystem_CAPS_staticParse(String)

Konwertuje ciąg reprezentujący datę i godzinę na jego DateTime równoważne.

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider)

Konwertuje ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu informacji specyficznych dla kultury.

System_CAPS_pubmethodSystem_CAPS_staticParse(String, IFormatProvider, DateTimeStyles)

Konwertuje ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu informacji specyficznych dla kultury i formatowanie stylu.

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String, IFormatProvider)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu podanego formatu i informacji specyficznych dla kultury. Format ciągu reprezentującego musi dokładnie pasować określonego formatu.

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String, IFormatProvider, DateTimeStyles)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu podanego formatu, informacji specyficznych dla kultury i stylu. Format ciągu reprezentującego musi dokładnie pasować określonego formatu lub jest zgłaszany wyjątek.

System_CAPS_pubmethodSystem_CAPS_staticParseExact(String, String[], IFormatProvider, DateTimeStyles)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu określonej tablicy formatów, informacji specyficznych dla kultury i stylu. Format ciągu reprezentującego musi dokładnie co najmniej jednego ze wskazanych formatów lub jest zgłaszany wyjątek.

System_CAPS_pubmethodSystem_CAPS_staticSpecifyKind(DateTime, DateTimeKind)

Tworzy nowy DateTime obiekt, który ma taką samą liczbę znaczników, jak określono DateTime, ale jest wyznaczony jako czas lokalny, uniwersalny czas koordynowany (UTC) lub nie, wskazane przez określony DateTimeKind wartość.

System_CAPS_pubmethodSubtract(DateTime)

Odejmuje określonej daty i godziny w tym wystąpieniu.

System_CAPS_pubmethodSubtract(TimeSpan)

Odejmuje określony czas, w tym wystąpieniu.

System_CAPS_pubmethodToBinary()

Serializuje bieżącego DateTime obiektu wartość binarną 64-bitowy, który następnie może służyć do odtworzenia DateTime obiektu.

System_CAPS_pubmethodToFileTime()

Konwertuje wartość bieżącego DateTime obiektu na czas pliku systemu Windows.

System_CAPS_pubmethodToFileTimeUtc()

Konwertuje wartość bieżącego DateTime obiektu na czas pliku systemu Windows.

System_CAPS_pubmethodToLocalTime()

Konwertuje wartość bieżącego DateTime obiektu na czas lokalny.

System_CAPS_pubmethodToLongDateString()

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważne daty długiej.

System_CAPS_pubmethodToLongTimeString()

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważne dużo czasu.

System_CAPS_pubmethodToOADate()

Konwertuje wartość tego wystąpienia odpowiada dacie automatyzacji OLE.

System_CAPS_pubmethodToShortDateString()

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważne daty krótkiej.

System_CAPS_pubmethodToShortTimeString()

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważne godziny krótkiej.

System_CAPS_pubmethodToString()

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważnego przy użyciu konwencji formatowania bieżącej kultury.(Przesłania ValueType.ToString()).

System_CAPS_pubmethodToString(IFormatProvider)

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważnego, korzystając z informacji zawartych w określonym formacie specyficzne dla kultury.

System_CAPS_pubmethodToString(String)

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważnego przy użyciu podanego formatu i Konwencji formatowania bieżącej kultury.

System_CAPS_pubmethodToString(String, IFormatProvider)

Konwertuje wartość bieżącego DateTime obiektu na jego reprezentację ciągu równoważnego przy użyciu podanego formatu i informacji specyficznych dla kultury.

System_CAPS_pubmethodToUniversalTime()

Konwertuje wartość bieżącego DateTime obiekt uniwersalny czas koordynowany (UTC).

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, DateTime)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważny i zwraca wartość wskazującą, czy konwersja powiodła się.

System_CAPS_pubmethodSystem_CAPS_staticTryParse(String, IFormatProvider, DateTimeStyles, DateTime)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu informacji o określonym formacie specyficzne dla kultury i formatowanie stylu i zwraca wartość wskazującą, czy konwersja powiodła się.

System_CAPS_pubmethodSystem_CAPS_staticTryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu podanego formatu, informacji specyficznych dla kultury i stylu. Format ciągu reprezentującego musi dokładnie pasować określonego formatu. Metoda zwraca wartość wskazującą, czy konwersja powiodła się.

System_CAPS_pubmethodSystem_CAPS_staticTryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)

Konwertuje określony ciąg reprezentujący datę i godzinę na jego DateTime równoważne przy użyciu określonej tablicy formatów, informacji specyficznych dla kultury i stylu. Format ciągu reprezentującego musi dokładnie co najmniej jednego ze wskazanych formatów. Metoda zwraca wartość wskazującą, czy konwersja powiodła się.

NazwaOpis
System_CAPS_pubfieldSystem_CAPS_staticMaxValue

Reprezentuje największa możliwa wartość z DateTime. To pole jest tylko do odczytu.

System_CAPS_pubfieldSystem_CAPS_staticMinValue

Reprezentuje wartość najmniejszy możliwy DateTime. To pole jest tylko do odczytu.

NazwaOpis
System_CAPS_puboperatorSystem_CAPS_staticAddition(DateTime, TimeSpan)

Dodaje określony interwał do określonej daty i godziny, reaguje nowe daty i godziny.

System_CAPS_puboperatorSystem_CAPS_staticEquality(DateTime, DateTime)

Określa, czy dwóch określonych wystąpień DateTime są równe.

System_CAPS_puboperatorSystem_CAPS_staticGreaterThan(DateTime, DateTime)

Określa, czy jeden określony DateTime jest późniejsza niż inna określona DateTime.

System_CAPS_puboperatorSystem_CAPS_staticGreaterThanOrEqual(DateTime, DateTime)

Określa, czy jeden określony DateTime przedstawia datę i godzinę, która jest taka sama wcześniejsza niż innego określone DateTime.

System_CAPS_puboperatorSystem_CAPS_staticInequality(DateTime, DateTime)

Określa, czy dwóch określonych wystąpień DateTime nie są równe.

System_CAPS_puboperatorSystem_CAPS_staticLessThan(DateTime, DateTime)

Określa, czy jeden określony DateTime jest wcześniejsza niż inna określona DateTime.

System_CAPS_puboperatorSystem_CAPS_staticLessThanOrEqual(DateTime, DateTime)

Określa, czy jeden określony DateTime reprezentuje datę i godzinę, która jest taka sama jak lub wcześniejsze niż inna określona DateTime.

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(DateTime, DateTime)

Odejmuje określonej daty i czasu od innego określonej daty i godziny i zwraca przedział czasu.

System_CAPS_puboperatorSystem_CAPS_staticSubtraction(DateTime, TimeSpan)

Odejmuje w określonym interwale czasu z określoną datą i godziną i zwraca nową datę i godzinę.

NazwaOpis
System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToBoolean(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToByte(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToChar(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDateTime(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Zwraca bieżącą DateTime obiektu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDecimal(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDouble(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt16(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt32(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt64(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSByte(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSingle(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToType(Type, IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Konwertuje bieżącą DateTime obiektu do obiektu określonego typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt16(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt32(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt64(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do bezpośredniego użycia z poziomu kodu. Ta konwersja nie jest obsługiwana. Podjęto próbę użycia tej metody powoduje InvalidCastException.

System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

Wypełnienie SerializationInfo obiektu z danych potrzebnych do serializacji bieżącego DateTime obiektu.

System_CAPS_noteUwaga

Aby wyświetlić kod źródłowy .NET Framework dla tego typu, zobacz Reference Source. Przeglądanie kodu źródłowego w trybie online, Pobierz odwołanie do przeglądania w trybie offline i postępuj zgodnie z instrukcjami źródła (w tym poprawki i aktualizacje) podczas debugowania. see instructions.

DateTime Typ wartości reprezentuje daty i godziny z wartości z zakresu od 00:00:00 (północ), 1 stycznia 0001 Anno Domini (wspólna Era) do 11:59:59 PM, 31 grudnia, 9999 r. N.E. (R). w kalendarzu gregoriańskim.

Wartości czasu są mierzone w jednostkach 100 nanosekund o nazwie znaczniki i określonej daty jest liczbę znaczników od 12:00, a w dniu 1 stycznia 0001 r. (R). w GregorianCalendar kalendarza (z wyjątkiem znaczników dodane przestępnym sekund). Na przykład wartość znaczniki 31241376000000000L reprezentuje datę piątku, 01 styczeń 0100 północy 12:00:00. A DateTime wartość jest zawsze wyrażona w kontekście jawne lub kalendarz domyślny.

System_CAPS_noteUwaga

Jeśli pracujesz z wartością znaczniki czy ma zostać przekonwertowany na niektórych innych interwał czasu, takie jak minut i sekund, należy użyć TimeSpan.TicksPerDay, TimeSpan.TicksPerHour, TimeSpan.TicksPerMinute, TimeSpan.TicksPerSecond, lub TimeSpan.TicksPerMillisecond Stała dokonać konwersji. Na przykład aby dodać liczbę sekund, reprezentowane przez określoną liczbę znaczniki osi Second składnik DateTime wartości, można użyć wyrażenia dateValue.Second + nTicks/Timespan.TicksPerSecond.

W tej sekcji:

Utworzenie wystąpienia obiektu typu DateTime
Wartości typu DateTime i ich reprezentacje w postaci ciągów
Konwertowanie ciągów na wartości typu DateTime
Uwagi dotyczące wersji
Wartości typu DateTime
Operacje typu DateTime
Rozwiązania typu Data/Godzina
Vs daty/godziny. TimeSpan
Przechowywanie wartości daty/godziny
Uwagi dotyczące współdziałania COM

Można utworzyć nowy DateTime wartość w jednej z następujących sposobów:

  • Przez wywołanie żadnego z przeciążeń DateTime Konstruktor, który pozwala użytkownikowi na określenie określone elementy wartość daty i godziny (np. rok, miesiąc i dzień lub liczbę znaczników). Poniższa instrukcja pokazano wywołanie do jednego z DateTime konstruktorów do tworzenia daty z danego roku, miesiąc, dzień, godzinę, minutę i sekundę.

    DateTime date1 = new DateTime(2008, 5, 1, 8, 30, 52);
    
  • Przy użyciu składni żadnych specyficznych dla kompilatora deklarowania wartości daty i godziny. Na przykład następująca instrukcja języka Visual Basic inicjuje nową DateTime wartość.

    Dim date1 As Date = #5/1/2008 8:30:52AM#
    
  • Przypisując DateTime obiekt zwracany przez właściwość lub metoda wartość daty i godziny. W poniższym przykładzie przypisano bieżącej daty i czasu, bieżący uniwersalny czas koordynowany (UTC) daty i godziny oraz bieżącej daty do trzech nowych DateTime zmiennych.

    DateTime date1 = DateTime.Now;
    DateTime date2 = DateTime.UtcNow;
    DateTime date3 = DateTime.Today;
    
  • Przez analizowanie ciąg reprezentujący wartość daty i godziny. Parse, ParseExact, TryParse, I TryParseExact wszystkich metod konwertowanie ciągu na jego odpowiednik wartość daty i godziny. W poniższym przykładzie użyto Parse metodę, aby przeanalizować ciąg i przekonwertować go na DateTime wartość.

    string dateString = "5/1/2008 8:30:52 AM";
    DateTime date1 = DateTime.Parse(dateString, 
                              System.Globalization.CultureInfo.InvariantCulture); 
    

    Należy pamiętać, że TryParse i TryParseExact metody wskazują, czy określony ciąg zawiera nieprawidłowy obraz DateTime wartość oprócz przeprowadzania konwersji.

  • Przez wywołanie DateTime struktury niejawne domyślnego konstruktora. (Szczegółowe informacje dotyczące niejawne domyślnego konstruktora typu wartości, zobacz Typy wartości (odwołanie w C#).) Deklarowanie jest równoważne przybliżony dla kompilatory obsługujące, DateTime wartość bez jawnie przypisanie do niego daty i godziny. W poniższym przykładzie pokazano wywołanie DateTime niejawne domyślnego konstruktora w języku C# i Visual Basic, a także DateTime Deklaracja zmiennej z nie przypisania w języku Visual Basic.

    DateTime dat1 = new DateTime();
    // The following method call displays 1/1/0001 12:00:00 AM.
    Console.WriteLine(dat1.ToString(System.Globalization.CultureInfo.InvariantCulture));
    // The following method call displays True.
    Console.WriteLine(dat1.Equals(DateTime.MinValue));
    

Wewnętrznie, wszystkie DateTime wartości są reprezentowane jako liczbę znaczników (liczba interwałów 100 nanosekund), które upłynęły od północy 12:00:00, 1 stycznia 0001. Rzeczywiste DateTime wartość jest niezależna od sposobu, w którym ta wartość pojawia się podczas wyświetlania w element interfejsu użytkownika lub zapisywane w pliku. Wygląd DateTime wartość jest wynikiem operacji formatowania. Formatowanie to proces konwertowania wartości na jego reprezentację ciągu.

Ponieważ wyglądu wartości daty i godziny zależy od takich czynników, jak kultury, międzynarodowych standardów, wymagania aplikacji i osobistych preferencji DateTime struktury oferuje dużą elastyczność w formatowaniu wartości daty i godziny przy użyciu przeciążeń jego ToString metody. Domyślnie DateTime.ToString() Metoda zwraca ciąg reprezentujący wartość daty i godziny przy użyciu bieżącej kultury daty krótkiej i wzorzec godziny długiej. W poniższym przykładzie użyto domyślnie DateTime.ToString() metodę, aby wyświetlić datę i godzinę, przy użyciu daty krótkiej i wzorzec godziny długiej dla en US kultury bieżącej kultury na komputerze, na którym uruchomiono przykładu.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString());
// For en-US culture, displays 3/1/2008 7:00:00 AM

DateTime.ToString(IFormatProvider) Metoda zwraca ciąg reprezentujący wartość daty i godziny przy użyciu daty krótkiej i wzorzec godziny długiej określonej kultury. W poniższym przykładzie użyto DateTime.ToString(IFormatProvider) metodę, aby wyświetlić datę i godzinę, przy użyciu daty krótkiej i wzorzec godziny długiej dla kultury fr-FR.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 01/03/2008 07:00:00

DateTime.ToString(String) Metoda zwraca ciąg reprezentujący datę i godzinę w formacie zdefiniowanym przez specyfikator formatu standardowego lub niestandardowego, przy użyciu konwencji formatowania bieżącej kultury. W poniższym przykładzie użyto DateTime.ToString(String) metodę, aby wyświetlić pełnej daty i godziny wzorzec en US kultury bieżącej kultury na komputerze, na którym uruchomiono przykładu.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F"));
// Displays Saturday, March 01, 2008 7:00:00 AM

DateTime.ToString(String, IFormatProvider)Metoda zwraca ciąg reprezentujący datę i godzinę w formacie zdefiniowane przez specyfikator formatu określonego i przy użyciu konwencji formatowania określonej kultury. W poniższym przykładzie użyto DateTime.ToString(String, IFormatProvider) metodę, aby wyświetlić pełnej daty i godziny wzorzec kultury fr-FR.

DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F", new System.Globalization.CultureInfo("fr-FR")));
// Displays samedi 1 mars 2008 07:00:00

Aby uzyskać więcej informacji na temat formatowania DateTime wartości, zobacz Standardowe ciągi formatujące datę i godzinę i Niestandardowe ciągi formatujące datę i godzinę.

Analizowanie obejmuje konwertowanie ciąg reprezentujący datę i godzinę na DateTime wartość. Zazwyczaj ciągów daty i godziny są dwóch różnych wartości użycia w aplikacjach:

  • Reprezentują daty i godziny, który może mieć różne formy i które odzwierciedlają konwencje kultury bieżącej lub określonej kultury. Na przykład aplikacja może umożliwia użytkownikowi, którego bieżącą kulturą jest en US, aby wprowadzić wartość daty jako "12/15/2013" lub "15 grudnia 2013", i umożliwia użytkownikowi, którego bieżącą kulturą jest en-GB, aby wprowadzić wartość daty jako "15 12/2013" lub "15 grudnia 2013".

  • Reprezentują datę i godzinę w formacie wstępnie zdefiniowane. Na przykład aplikacja może serializować daty w postaci "20130103" niezależnie od kultury, na którym działa aplikacja, lub może wymagać wprowadzać datę w formacie daty krótkiej dla bieżącej kultury.

Można użyć Parse lub TryParse metody konwersji ciągu znaków, który może odzwierciedlał jednego z typowych formatów daty i godziny używany przez kulturę do DateTime wartości. W poniższym przykładzie pokazano, jak skorzystać z TryParse do konwersji ciągów daty w wielu różnych formatach specyficzne dla kultury na DateTime wartość. Bieżąca kultura jest zmieniana na język angielski (Wielka Brytania) i wywołania GetDateTimeFormats() Metoda generuje tablicę ciągów daty i godziny. Następnie przekazuje każdego elementu w tablicy do TryParse metody. Dane wyjściowe z przykładu pokazują, że metoda analizy mógł pomyślnie konwertować każdy z specyficzne dla kultury ciągów daty i godziny.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

      DateTime date1 = new DateTime(2013, 6, 1, 12, 32, 30);
      List<string> badFormats = new List<String>();

      Console.WriteLine("{0,-37} {1,-19}\n", "Date String", "Date");
      foreach (var dateString in date1.GetDateTimeFormats()) {
         DateTime parsedDate;
         if (DateTime.TryParse(dateString, out parsedDate))
            Console.WriteLine("{0,-37} {1,-19}", dateString, DateTime.Parse(dateString));
         else
            badFormats.Add(dateString);
      } 

      // Display strings that could not be parsed.
      if (badFormats.Count > 0) {
         Console.WriteLine("\nStrings that could not be parsed: ");
         foreach (var badFormat in badFormats)
            Console.WriteLine("   {0}", badFormat);         
      }
   }
}
// The example displays the following output:
//       Date String                           Date               
//       
//       01/06/2013                            01/06/2013 00:00:00
//       01/06/13                              01/06/2013 00:00:00
//       1/6/13                                01/06/2013 00:00:00
//       1.6.13                                01/06/2013 00:00:00
//       2013-06-01                            01/06/2013 00:00:00
//       01 June 2013                          01/06/2013 00:00:00
//       1 June 2013                           01/06/2013 00:00:00
//       01 June 2013 12:32                    01/06/2013 12:32:00
//       01 June 2013 12:32                    01/06/2013 12:32:00
//       01 June 2013 12:32 PM                 01/06/2013 12:32:00
//       01 June 2013 12:32 PM                 01/06/2013 12:32:00
//       1 June 2013 12:32                     01/06/2013 12:32:00
//       1 June 2013 12:32                     01/06/2013 12:32:00
//       1 June 2013 12:32 PM                  01/06/2013 12:32:00
//       1 June 2013 12:32 PM                  01/06/2013 12:32:00
//       01 June 2013 12:32:30                 01/06/2013 12:32:30
//       01 June 2013 12:32:30                 01/06/2013 12:32:30
//       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
//       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
//       1 June 2013 12:32:30                  01/06/2013 12:32:30
//       1 June 2013 12:32:30                  01/06/2013 12:32:30
//       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
//       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
//       01/06/2013 12:32                      01/06/2013 12:32:00
//       01/06/2013 12:32                      01/06/2013 12:32:00
//       01/06/2013 12:32 PM                   01/06/2013 12:32:00
//       01/06/2013 12:32 PM                   01/06/2013 12:32:00
//       01/06/13 12:32                        01/06/2013 12:32:00
//       01/06/13 12:32                        01/06/2013 12:32:00
//       01/06/13 12:32 PM                     01/06/2013 12:32:00
//       01/06/13 12:32 PM                     01/06/2013 12:32:00
//       1/6/13 12:32                          01/06/2013 12:32:00
//       1/6/13 12:32                          01/06/2013 12:32:00
//       1/6/13 12:32 PM                       01/06/2013 12:32:00
//       1/6/13 12:32 PM                       01/06/2013 12:32:00
//       1.6.13 12:32                          01/06/2013 12:32:00
//       1.6.13 12:32                          01/06/2013 12:32:00
//       1.6.13 12:32 PM                       01/06/2013 12:32:00
//       1.6.13 12:32 PM                       01/06/2013 12:32:00
//       2013-06-01 12:32                      01/06/2013 12:32:00
//       2013-06-01 12:32                      01/06/2013 12:32:00
//       2013-06-01 12:32 PM                   01/06/2013 12:32:00
//       2013-06-01 12:32 PM                   01/06/2013 12:32:00
//       01/06/2013 12:32:30                   01/06/2013 12:32:30
//       01/06/2013 12:32:30                   01/06/2013 12:32:30
//       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
//       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
//       01/06/13 12:32:30                     01/06/2013 12:32:30
//       01/06/13 12:32:30                     01/06/2013 12:32:30
//       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
//       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
//       1/6/13 12:32:30                       01/06/2013 12:32:30
//       1/6/13 12:32:30                       01/06/2013 12:32:30
//       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
//       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
//       1.6.13 12:32:30                       01/06/2013 12:32:30
//       1.6.13 12:32:30                       01/06/2013 12:32:30
//       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
//       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
//       2013-06-01 12:32:30                   01/06/2013 12:32:30
//       2013-06-01 12:32:30                   01/06/2013 12:32:30
//       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
//       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
//       01 June                               01/06/2013 00:00:00
//       01 June                               01/06/2013 00:00:00
//       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
//       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
//       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
//       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
//       2013-06-01T12:32:30                   01/06/2013 12:32:30
//       12:32                                 22/04/2013 12:32:00
//       12:32                                 22/04/2013 12:32:00
//       12:32 PM                              22/04/2013 12:32:00
//       12:32 PM                              22/04/2013 12:32:00
//       12:32:30                              22/04/2013 12:32:30
//       12:32:30                              22/04/2013 12:32:30
//       12:32:30 PM                           22/04/2013 12:32:30
//       12:32:30 PM                           22/04/2013 12:32:30
//       2013-06-01 12:32:30Z                  01/06/2013 05:32:30
//       01 June 2013 19:32:30                 01/06/2013 19:32:30
//       01 June 2013 19:32:30                 01/06/2013 19:32:30
//       01 June 2013 07:32:30 PM              01/06/2013 19:32:30
//       01 June 2013 7:32:30 PM               01/06/2013 19:32:30
//       1 June 2013 19:32:30                  01/06/2013 19:32:30
//       1 June 2013 19:32:30                  01/06/2013 19:32:30
//       1 June 2013 07:32:30 PM               01/06/2013 19:32:30
//       1 June 2013 7:32:30 PM                01/06/2013 19:32:30
//       June 2013                             01/06/2013 00:00:00
//       June 2013                             01/06/2013 00:00:00

Można użyć TryParse i TryParseExact metody, aby przekonwertować ciąg daty i godziny, który musi odpowiadać określonym formacie lub formatów do DateTime wartości. Wymagany format lub formatu można określić jako parametr do analizy methodby przy użyciu co najmniej jednego lub ciągi formatu daty i godziny. W poniższym przykładzie użyto TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) metody do konwersji ciągów, które muszą być w formacie "RRRRMMDD" lub "HHmmss" do DateTime wartości.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formats = { "yyyyMMdd", "HHmmss" };
      string[] dateStrings = { "20130816", "20131608", "  20130816   ", 
                               "115216", "521116", "  115216  " };
      DateTime parsedDate;

      foreach (var dateString in dateStrings) {
         if (DateTime.TryParseExact(dateString, formats, null, 
                                    DateTimeStyles.AllowWhiteSpaces |
                                    DateTimeStyles.AdjustToUniversal,
                                    out parsedDate))
            Console.WriteLine("{0} --> {1:g}", dateString, parsedDate);
         else
            Console.WriteLine("Cannot convert {0}", dateString);
      }
   }
}
// The example displays the following output:
//       20130816 --> 8/16/2013 12:00 AM
//       Cannot convert 20131608
//         20130816    --> 8/16/2013 12:00 AM
//       115216 --> 4/22/2013 11:52 AM
//       Cannot convert 521116
//         115216   --> 4/22/2013 11:52 AM

Parse i ParseExact metody zgłosić wyjątek, jeśli ciąg do konwersji na DateTime nie można przeanalizować wartości. TryParse i TryParseExact metody zwracają Boolean wartość wskazującą, czy konwersja powiodła się czy nie powiodło się. Ponieważ operacji analizowania ciągów daty i godziny, szczególnie jeśli ciągi są wejściowych przez użytkowników, zwykle ma wysokiego współczynnika, i obsługa wyjątków jest kosztowne, należy używać TryParse lub TryParseExact metod w scenariuszach, gdzie wydajności jest ważne lub konwersje podlegają wysoki stopień awarii.

Aby uzyskać więcej informacji na temat analizowanie wartości daty i godziny, zobacz Analizowanie ciągów daty i godziny w programie .NET Framework.

Przed .NET Framework w wersji 2.0 DateTime Struktura zawiera pole 64-bitowy składający się z polem 2-bitowy nieużywane połączony z prywatnych pola Znaczniki, które jest polem 62-bitowe bez znaku, zawierającą liczbę znaczników, które reprezentują daty i godziny. Wartość pola Znaczniki można uzyskać z Ticks Właściwości.

Począwszy od programu .NET Framework 2.0, DateTime Struktura zawiera pole 64-bitowy składający się z rodzaju pole private połączony z pola Znaczniki. Rodzaju pole jest polem 2-bitowych, która wskazuje, czy DateTime struktury reprezentuje czas lokalny, uniwersalny czas koordynowany (UTC) lub w czasie w nieokreślony strefa czasowa. Podczas wykonywania konwersji czasu między strefami czasowymi, ale nie dla porównania czasu lub operacje arytmetyczne, używane jest pole rodzaju. Wartość pola rodzaju można uzyskać z Kind Właściwości.

System_CAPS_noteUwaga

Alternatywa dla DateTime struktury Praca z wartościami daty i godziny w szczególności stref czasowych jest DateTimeOffset struktury. DateTimeOffset Struktury przechowuje informacje o datę i godzinę w prywatnej DateTime pola i liczbę minut, przez które które daty i godziny różni się od czasu UTC w prywatnej Int16 pola. Dzięki temu dla DateTimeOffset wartość, aby uwzględnić czas w danej strefy czasowej, natomiast DateTime wartość jednoznacznie można uwzględnić tylko czasem UTC i czasem lokalnej strefy czasowej. Aby uzyskać informacje o tym, kiedy używać DateTime struktury lub DateTimeOffset struktury podczas pracy z wartości daty i godziny, zobacz Wybieranie pomiędzy elementem DateTime, DateTimeOffset, TimeSpan i TimeZoneInfo.

Opisy wartości czasu w DateTime typu często są wyrażone za pomocą standardowych uniwersalny czas koordynowany (UTC), czyli nazwa uznanych czas uniwersalny Greenwich (GMT). Uniwersalny czas koordynowany to czas mierzony na zerowej długości stopni, punktem początkowym UTC. Czas letni nie ma zastosowania do czasu UTC.

Czas lokalny jest określana względem danej strefy czasowej. Strefa czasowa jest skojarzony z przesunięcie strefy czasowej jest przesunięcie strefy czasowej, mierzone w godzinach od punktu pochodzenia UTC. Ponadto czas lokalny opcjonalnie zależy od czasu, który dodaje lub odejmuje godziny od długości jednego dnia. W związku z tym czas lokalny jest obliczana przez dodanie przesunięcia strefy czasowej UTC i dopasowywanie czasu w razie potrzeby. Przesunięcie strefy czasowej w miejscu pochodzenia UTC wynosi zero.

Czas UTC jest odpowiedni do obliczeń, porównania i zapisywanie dat i godzin w plikach. Czas lokalny jest przeznaczona do wyświetlania w interfejsie użytkownika aplikacji pulpitu. Aplikacje świadome strefy czasowej (takie jak wiele aplikacji sieci Web) muszą pracować z większą liczbą innych strefach czasowych.

Jeśli Kind Właściwość DateTime obiekt jest DateTimeKind.Unspecified, nieokreślony jest, czy godzina reprezentowana jest czas lokalny, czasu UTC lub czasu w innych strefach czasowych.

Za pomocą obliczeń DateTime strukturze, takich jak Add lub Subtract, nie modyfikuje wartość struktury. Zamiast tego obliczenia zwraca nowy DateTime struktury, którego wartość jest wynikiem obliczenia.

Operacje konwersji między strefami czasowymi (na przykład między czasem UTC a lokalnym lub między strefami czasowymi) uwzględnia czasu letniego, ale nie obsługują operacje arytmetyczne i porównania.

DateTime Samej strukturze zapewnia ograniczoną obsługę konwertowanie między strefami czasowymi do innego. Można użyć ToLocalTime metody do konwersji czasu UTC na czas lokalny lub można użyć ToUniversalTime metody konwersji z lokalnego czasu UTC. Jednak pełny zestaw metody konwersji strefy czasowej jest dostępna w TimeZoneInfo klasy. Przy użyciu tych metod, można przekonwertować czas w jednym stref czasowych na świecie czasu w innych strefach czasowych.

Obliczenia i porównania DateTime obiekty są znaczące tylko wtedy, gdy obiekty reprezentują godziny w tej samej strefie czasowej. Można użyć TimeZoneInfo obiektu do reprezentowania DateTime wartości czasu strefy, mimo że dwie luźno powiązanych. (To, DateTime obiekt nie ma właściwości, która zwraca obiekt, który reprezentuje tej wartości daty i godziny w strefie czasowej innej niż Kind Właściwości.) Z tego powodu w aplikacji obsługujących strefy czasowej, konieczne jest zastosowanie inny mechanizm zewnętrzny, aby określić strefę czasową, w której DateTime obiekt został utworzony. Na przykład można użyć struktury, która otacza zarówno DateTime wartość i TimeZoneInfo obiekt, który reprezentuje DateTime Strefa czasowa tej wartości. Szczegółowe informacje o użyciu czasu UTC w obliczeniach i porównania z DateTime wartości, zobacz Wykonywanie operacji arytmetycznych na wartościach dat i godzin.

Każdego DateTime Członek niejawnie korzysta z kalendarza gregoriańskiego jego operacji, z wyjątkiem konstruktorów, które określają kalendarza, i metody z parametrem pochodną IFormatProvider, takich jak System.Globalization.DateTimeFormatInfo, który określa niejawnie kalendarza.

Działania członków DateTime typu wziąć pod uwagę szczegóły, takie jak przestępnego oraz liczbę dni w miesiącu.

Dwie inne typowe operacje z DateTime wartości obejmują konwersji wartości daty i godziny, do i z jego reprezentację ciągu. Proces konwersji DateTime wartość na jego reprezentację ciągu jest operacja formatowania; Aby uzyskać więcej informacji na temat formatowania, zobacz DateTime wartości i ich reprezentacji ciągu. Proces konwersji ciąg reprezentujący datę i godzinę na DateTime wartość jest operacji analizowania; Aby uzyskać więcej informacji na temat analizowanie zobacz Konwertowanie ciągów na wartości typu DateTime.

System_CAPS_noteUwaga

Jako alternatywę do wykonywania daty i godziny arytmetyczne na DateTime wartości do pomiaru czasu, można użyć Stopwatch klasy.

Ticks Właściwość wyraża wartości daty i godziny w jednostkach jeden dziesięciu milionowych części sekundy i Millisecond właściwość zwraca stutysięcznych części sekundy w wartości daty i godziny. Jednak jeśli używane są powtarzane wywołania DateTime.Now Właściwość do mierzenia Upłynęło czasu i dotyczy małych interwałów mniej niż 100 milisekund, należy pamiętać, że wartości zwracane przez DateTime.Now Właściwości są zależne od zegar systemowy, który w systemach Windows 7 i Windows 8 o rozdzielczości około 15 milisekund.

W poniższym przykładzie pokazano zależność wartości bieżącej daty i godziny od rozdzielczości zegara systemowego. W przykładzie zewnętrzna pętla powtarza 20 razy, a pętlę wewnętrzną służy do opóźnienia zewnętrzna pętla. Jeśli wartość licznika pętli zewnętrzne wynosi 10, wywołanie Thread.Sleep Metoda opóźnienia pięć milisekund. Dane wyjściowe z przykładu pokazują, liczbę milisekund w zwracany przez DateTime.Now.Milliseconds zmienić właściwości tylko po wywołaniu Thread.Sleep.

using System;
using System.Threading;

public class Example
{
   public static void Main()
   {
      String output = "";
      for (int ctr = 0; ctr <= 20; ctr++) {
         output += String.Format("{0}\n", DateTime.Now.Millisecond);
         // Introduce a delay loop.
         for (int delay = 0; delay <= 1000; delay++)
         {}

         if (ctr == 10) {
            output += "Thread.Sleep called...\n";
            Thread.Sleep(5);
         }
      }
      Console.WriteLine(output);
   }
}
// The example displays the following output:
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       111
//       Thread.Sleep called...
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143
//       143

DateTime i TimeSpan typy wartości różnią się w tym DateTime reprezentuje moment w czasie, dlatego TimeSpan przedstawia interwał czasu. Oznacza to, na przykład, że należy odjąć jedno wystąpienie DateTime z innej uzyskanie TimeSpan obiekt, który reprezentuje odstęp czasu między nimi. Lub można dodać dodatnie TimeSpan do bieżącego DateTime uzyskać DateTime wartość, która reprezentuje datę przyszłą.

Można dodać lub odjąć przedział czasu z DateTime obiektu. Przedziały czasu może być dodatnia lub ujemna, może być wyrażona w jednostkach, takich jak znaczniki lub sekund lub mogą być wyrażone jako TimeSpan obiektu.

Można ją utrwalić DateTime wartości na cztery sposoby:

Niezależnie od techniki można wybrać, należy zapewnić, aby procedury, która przywraca DateTime wartości nie spowoduje utratę danych albo zgłosić wyjątek. DateTime w przypadku obustronne wartości. Oznacza to, że oryginalna wartość i przywrócona wartość powinna być taka sama. Jeśli oryginalna DateTime wartość reprezentuje pojedynczy moment czasu, należy zidentyfikować w czasie tej samej godziny po przywróceniu.

Aby pomyślnie przywrócić DateTime wartości, które są zachowywane jako ciągi, należy wykonać następujące czynności:

  • Zakładają tego samego specyficzne dla kultury formatowania podczas przywracania ciąg jako utrwalone po. Aby upewnić się, że ciąg można przywrócić w systemie, w których bieżącej kultury różni się od kultury systemu został zapisany na, wywołaj ToStringprzeciążenia, aby zapisać ciąg przy użyciu konwencji niezmiennej kultury i wywołania Parse(String, IFormatProvider, DateTimeStyles) lub TryParse(String, IFormatProvider, DateTimeStyles, DateTime)overloadto przywrócić ciąg przy użyciu konwencji niezmiennej kultury. Nigdy nie używaj ToString(), Parse(String), lub TryParse(String, DateTime) przeciążenia, które używają Konwencji bieżącej kultury wątku.

  • Dane reprezentuje konkretny moment czasu, upewnij się, że reprezentuje sam moment w czasie, gdy zostanie przywrócona, nawet jeśli zostaną przywrócone w systemie, który korzysta z innej strefy czasowej. Aby to zrobić, należy przekonwertować DateTime wartości do uniwersalny czas koordynowany (UTC) przed zapisaniem. Można serializować również wartości oraz informacje o strefie czasowej; Aby uzyskać więcej informacji na temat tej metody, zobacz danych serializacji daty/godziny i strefy czasowej.

Najczęściej spotykanym błędem przy utrwalanie DateTime ma polegać na Konwencji formatowania bieżącej kultury lub domyślne wartości jako ciągi. Jeśli bieżąca kultura różni się podczas zapisywania i przywracania ciągi wystąpienia problemów. W poniższym przykładzie pokazano te problemy. Zapisuje pięć dat przy użyciu konwencji formatowania bieżącej kultury, w tym przypadku jest angielski (Stany Zjednoczone). Przywraca go dat przy użyciu konwencji formatowania bieżącej kultury, w tym przypadku jest angielski (Wielka Brytania). Ponieważ Konwencji formatowania dwóch kultur są różne, dwa dat nie można przywrócić, a pozostałe trzy daty są interpretowane niepoprawnie. Ponadto jeśli oryginalne wartości daty i godziny reprezentuje pojedynczy momentów w czasie przywróconej czasy są nieprawidłowe, ponieważ informacje o strefie czasowej zostaną utracone.

using System;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   private const string filename = @".\BadDates.txt";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      string output = null;

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         output += dates[ctr].ToString() + (ctr != dates.Length - 1 ? "|" : "");
      }
      StreamWriter sw = new StreamWriter(filename);
      sw.Write(output);
      sw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      StreamReader sr = new StreamReader(filename);
      string[] inputValues = sr.ReadToEnd().Split( new char[] { '|' } , 
                                                  StringSplitOptions.RemoveEmptyEntries);
      sr.Close();
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var inputValue in inputValues) {
         DateTime dateValue;
         if (DateTime.TryParse(inputValue, out dateValue)) {
            Console.WriteLine("'{0}' --> {1:f}", inputValue, dateValue);
         }
         else {
            Console.WriteLine("Cannot parse '{0}'", inputValue);   
         }
      }
      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       Cannot parse //6/14/2014 6:32:00 AM//
//       //7/10/2014 11:49:00 PM// --> 07 October 2014 23:49
//       //1/10/2015 1:16:00 AM// --> 01 October 2015 01:16
//       Cannot parse //12/20/2014 9:45:00 PM//
//       //6/2/2014 3:14:00 PM// --> 06 February 2014 15:14
//       Restored dates...

Aby obustronnie konwertować DateTimewartości pomyślnie, wykonaj następujące kroki:

  1. Wartości reprezentują pojedynczy chwil czasu, przekonwertować je od lokalnego czasu na czas UTC, wywołując ToUniversalTime metody.

  2. Przekonwertować daty ich reprezentacji ciągu przez wywołanie metody ToString(String, IFormatProvider) lub String.Format(IFormatProvider, String, Object[]) przeciążenia. Wykorzystują konwencje formatowania niezmiennej kultury, określając CultureInfo.InvariantCulture jako provider argumentu. Określ, czy wartość powinna obustronne przy użyciu "O" lub "R".

  3. Gdy zostanie wywołana Parse(String, IFormatProvider, DateTimeStyles) lub TryParse(String, IFormatProvider, DateTimeStyles, DateTime) metody.

Aby przywrócić utrwalonego DateTime wartości bez utraty danych, wykonaj następujące czynności:

  1. Analizowanie danych przez wywołanie metodyParseExact lubTryParseExact przeciążenia. Określ CultureInfo.InvariantCulture jako provider argument, a także korzystać z tego samego formatu standardowego ciągu użyte do format argumentu podczas konwersji. Obejmują DateTimeStyles.RoundtripKind wartość w styles argumentu.

  2. Jeśli DateTime wartości reprezentują pojedynczy momentów w czasie wywołania ToLocalTime metody konwersji przeanalizowany daty z czasu UTC na czas lokalny.

W poniższym przykładzie użyto Niezmienna kultura i ciąg formatu standardowego "O", aby upewnić się, żeDateTime reprezentują wartości, które są zapisywane i przywrócić tego samego moment w czasie, niezależnie od systemu, kultury i strefy czasowej z systemów źródłowych i docelowych.

using System;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   private const string filename = @".\Dates.txt";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      string output = null;

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         output += dates[ctr].ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) 
                   + (ctr != dates.Length - 1 ? "|" : "");
      }
      StreamWriter sw = new StreamWriter(filename);
      sw.Write(output);
      sw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      StreamReader sr = new StreamReader(filename);
      string[] inputValues = sr.ReadToEnd().Split( new char[] { '|' } , 
                                                  StringSplitOptions.RemoveEmptyEntries);
      sr.Close();
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var inputValue in inputValues) {
         DateTime dateValue;
         if (DateTime.TryParseExact(inputValue, "O", CultureInfo.InvariantCulture, 
                               DateTimeStyles.RoundtripKind, out dateValue)) {
            Console.WriteLine("'{0}' --> {1:f}", 
                              inputValue, dateValue.ToLocalTime());
         }
         else {
            Console.WriteLine("Cannot parse '{0}'", inputValue);   
         }
      }
      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       '2014-06-14T13:32:00.0000000Z' --> 14 June 2014 14:32
//       '2014-07-11T06:49:00.0000000Z' --> 11 July 2014 07:49
//       '2015-01-10T09:16:00.0000000Z' --> 10 January 2015 09:16
//       '2014-12-21T05:45:00.0000000Z' --> 21 December 2014 05:45
//       '2014-06-02T22:14:00.0000000Z' --> 02 June 2014 23:14
//       Restored dates...

Zamiast utrwalanie DateTime wartość jako ciąg, można ją utrwalić go jako Int64 wartość, która reprezentuje liczbę znaczników. W tym przypadku nie należy wziąć pod uwagę kultury systemów DateTime valuesare trwały i przywrócone na.

Aby zachować DateTime wartość jako liczba całkowita:

  • Jeśli DateTime wartości reprezentują pojedynczy momentów w czasie, przekonwertować je na czas UTC, wywołując ToUniversalTime metody.

  • Pobrać liczbę znaczników, reprezentowane przez DateTime wartość z jego Ticks Właściwości.

Aby przywrócić DateTime wartość, która została utrwalona jako liczba całkowita:

  1. Tworzenia wystąpienia nowego DateTime obiektu przez przekazanie Int64 wartość, która ma DateTime(Int64) Konstruktor.

  2. Jeśli DateTime wartość reprezentuje pojedynczy moment w czasie, przekonwertuj je względem czasu UTC na czas lokalny, wywołując ToLocalTime metody.

Poniższy przykład będzie się powtarzał tablicy DateTime wartości jako liczby całkowite w systemie w USA Strefa czasowa czasu pacyficznego. Jego przywraca w systemie w strefie UTC. Zawiera plik zawierający liczb całkowitych Int32 wartość, która wskazuje całkowitą liczbę Int64 wartości, które bezpośrednio po nim.

using System;
using System.Globalization;
using System.IO;
using System.Threading;

class Example
{
   private const string filename = @".\IntDates.bin";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      long[] ticks = new long[dates.Length];
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         ticks[ctr] = dates[ctr].ToUniversalTime().Ticks; 
      }
      FileStream fs = new FileStream(filename, FileMode.Create);
      BinaryWriter bw = new BinaryWriter(fs);
      bw.Write(ticks.Length);
      foreach (var tick in ticks)
         bw.Write(tick);

      bw.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      FileStream fs = new FileStream(filename, FileMode.Open);
      BinaryReader br = new BinaryReader(fs);
      int items;
      DateTime[] dates;

      try { 
         items = br.ReadInt32();
         dates = new DateTime[items];

         for (int ctr = 0; ctr < items; ctr++) {
            long ticks = br.ReadInt64();
            dates[ctr] = new DateTime(ticks).ToLocalTime();
         }
      }   
      catch (EndOfStreamException) {
         Console.WriteLine("File corruption detected. Unable to restore data...");
         return;
      }   
      catch (IOException) {
         Console.WriteLine("Unspecified I/O error. Unable to restore data...");
         return;
      }
      // Thrown during array initialization.
      catch (OutOfMemoryException) {
         Console.WriteLine("File corruption detected. Unable to restore data...");
         return;
      }
      finally {      
         br.Close();
      }   

      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var value in dates)
         Console.WriteLine(value.ToString("f"));

      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

Zamiast zapisywania DateTime wartości jako ciągi lub liczb całkowitych, które następnie muszą przekonwertować z powrotem do DateTime wartości, można ją utrwalić DateTime wartości za pomocą serializacji do strumienia lub plik, a następnie przywróć ich do deserializacji. W takim przypadku DateTimedanych jest serializowana w formacie niektóre określony obiekt i obiekty zostaną przywrócone, gdy są one deserializacji. Program formatujący lub serializator, takie jak XmlSerializer lub BinaryFormatter, obsługuje proces serializacji i deserializacji. Aby uzyskać więcej informacji na temat serializacji i typy serializacji obsługiwane przez program .NET Framework, zobacz Serializacji w programie .NET Framework.

W poniższym przykładzie użyto XmlSerializer klasy do serializacji i deserializacjiDateTime wartości, które reprezentują wszystkie leap dni roku w wieku dwudziestego pierwszego. Jeśli na przykład zostanie uruchomiony w systemie, którego bieżącą kulturą jest angielski (Wielka Brytania), dane wyjściowe przedstawia wynik. Ponieważ firma Microsoft została przeprowadzona DateTime obiekt, kod nie musi obsługiwać kultury różnice formatów daty i godziny.

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Xml.Serialization;

class Example
{
   private const string filename = @".\LeapYears.xml";

   public static void Main()
   {
      // Serialize the data.
      List<DateTime> leapYears = new List<DateTime>();
      for (int year = 2000; year <= 2100; year += 4) {
         if (DateTime.IsLeapYear(year)) 
            leapYears.Add(new DateTime(year, 2, 29));
      }
      DateTime[] dateArray = leapYears.ToArray();

      XmlSerializer serializer = new XmlSerializer(dateArray.GetType());
      TextWriter sw = new StreamWriter(filename);

      try {
         serializer.Serialize(sw, dateArray);
      }
      catch (InvalidOperationException e) {
         Console.WriteLine(e.InnerException.Message);         
      }
      finally {
         if (sw != null) sw.Close();
      }   

      // Deserialize the data.
      DateTime[] deserializedDates;
      using (FileStream fs = new FileStream(filename, FileMode.Open)) {
         deserializedDates = (DateTime[]) serializer.Deserialize(fs);
      } 

      // Display the dates.
      Console.WriteLine("Leap year days from 2000-2100 on an {0} system:",
                        Thread.CurrentThread.CurrentCulture.Name);
      int nItems = 0;
      foreach (var dat in deserializedDates) {
         Console.Write("   {0:d}     ", dat);
         nItems++;
         if (nItems % 5 == 0) 
               Console.WriteLine(); 
      }
   }
}
// The example displays the following output:
//    Leap year days from 2000-2100 on an en-GB system:
//       29/02/2000       29/02/2004       29/02/2008       29/02/2012       29/02/2016
//       29/02/2020       29/02/2024       29/02/2028       29/02/2032       29/02/2036
//       29/02/2040       29/02/2044       29/02/2048       29/02/2052       29/02/2056
//       29/02/2060       29/02/2064       29/02/2068       29/02/2072       29/02/2076
//       29/02/2080       29/02/2084       29/02/2088       29/02/2092       29/02/2096

Poprzedni przykład nie zawiera informacje o czasie. Jednak jeśli DateTime wartość reprezentuje moment w czasie i jest wyrażona jako czas lokalny, należy ją przekonwertować z czasu lokalnego na czas UTC przed serializacji go przez wywołanie metody ToUniversalTime metody. Po deserializacji go, należy ją przekonwertować względem czasu UTC na czas lokalny przez wywołanie metody ToLocalTime metody. W poniższym przykładzie użyto BinaryFormatter klasy do serializacjiDateTime danych w systemie w USA Strefy czasu pacyficznego standardowej i zdeserializować w systemie w strefie UTC.

using System;
using System.IO;
using System.Globalization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;

class Example
{
   private const string filename = @".\Dates.bin";

   public static void Main()
   {
      if (! File.Exists(filename))
         SaveDates();
      else
         RestoreDates();
   }

   private static void SaveDates()
   {
      DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0), 
                           new DateTime(2014, 7, 10, 23, 49, 0),  
                           new DateTime(2015, 1, 10, 1, 16, 0), 
                           new DateTime(2014, 12, 20, 21, 45, 0), 
                           new DateTime(2014, 6, 2, 15, 14, 0) }; 
      FileStream fs = new FileStream(filename, FileMode.Create);
      BinaryFormatter bin = new BinaryFormatter();

      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      for (int ctr = 0; ctr < dates.Length; ctr++) { 
         Console.WriteLine(dates[ctr].ToString("f"));
         dates[ctr] = dates[ctr].ToUniversalTime();
      }
      bin.Serialize(fs, dates);
      fs.Close();
      Console.WriteLine("Saved dates...");
   }

   private static void RestoreDates()
   {
      TimeZoneInfo.ClearCachedData();
      Console.WriteLine("Current Time Zone: {0}",
                        TimeZoneInfo.Local.DisplayName);
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");

      FileStream fs = new FileStream(filename, FileMode.Open);
      BinaryFormatter bin = new BinaryFormatter();
      DateTime[] dates = (DateTime[]) bin.Deserialize(fs);
      fs.Close();

      Console.WriteLine("The dates on an {0} system:", 
                        Thread.CurrentThread.CurrentCulture.Name);
      foreach (var value in dates)
         Console.WriteLine(value.ToLocalTime().ToString("f"));

      Console.WriteLine("Restored dates...");   
   }
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

Poprzednich przykładach ma wszystkie założenie, że DateTime wartości są wyrażone jako czas lokalny i konwersji wartości między czasem UTC i czasem lokalnym, więc odzwierciedlają sam moment w czasie w systemach źródłowych i docelowych. DateTime wartości mogą również uwzględniać momentów w czasie w strefie czasowej niż lokalne i UTC. W tym przypadku ponieważ DateTime Struktura nie jest uwzględniających strefy czasowe, należy do obu serializacji DateTimewartość i TimeZoneInfo obiekt, który reprezentuje strefy czasowej. W tym celu należy utworzyć typu, w których pola zawiera zarówno DateTime wartość i strefy czasowej. W poniższym przykładzie zdefiniowano DateWithTimeZone struktury, który ilustruje, jak może to zrobić.

using System;

namespace DateTimeExtensions
{
   [Serializable] public struct DateWithTimeZone
   {
      private TimeZoneInfo tz;
      private DateTime dt;

      public DateWithTimeZone(DateTime dateValue, TimeZoneInfo timeZone)
      {
         dt = dateValue;
         if (timeZone == null)
            tz = TimeZoneInfo.Local;
         else
            tz = timeZone;
      }   

      public TimeZoneInfo TimeZone 
      { get { return (tz); }
        set { tz = value; } }

      public DateTime DateTime 
      { get { return (dt); }
        set { dt = value; } }
   }
}
System_CAPS_importantWażne

DateWithTimeZone Struktura jest używana w dwóch następnych przykładach, w których serializacji i deserializacji tablicy DateWithTimeZone obiektów. Aby uruchomić przykłady, należy najpierw utworzyć bibliotekę klas, który zawiera DateWithTimeZone struktury, a następnie dodaj odwołanie do niej podczas kompilowania każdy przykład.

Przy użyciu DateWithTimeZone struktury, następnie można utrwalić daty i godziny oraz informacje o strefie czasowej. W poniższym przykładzie użyto BinaryFormatter klasy do serializacji tablicy DateWithTimeZoneobiektów.

using System;
using DateTimeExtensions;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Example
{
   public static void Main()
   {
      DateWithTimeZone[] dates= { new DateWithTimeZone(new DateTime(2014, 8, 9, 19, 30, 0),  
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")),
                                  new DateWithTimeZone(new DateTime(2014, 8, 15, 19, 0, 0), 
                                      TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")),  
                                  new DateWithTimeZone(new DateTime(2014, 8, 22, 19, 30, 0),  
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")),  
                                  new DateWithTimeZone(new DateTime(2014, 8, 28, 19, 0, 0), 
                                      TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")) };
      FileStream fs = new FileStream(@".\Schedule.bin", FileMode.Create);
      BinaryFormatter formatter = new BinaryFormatter();
      try {
         formatter.Serialize(fs, dates);
         // Display dates.
         foreach (var date in dates) {
            TimeZoneInfo tz = date.TimeZone;
            Console.WriteLine("{0} {1}", date.DateTime, 
                              tz.IsDaylightSavingTime(date.DateTime) ? 
                              tz.DaylightName : tz.StandardName);      
         }
      }
      catch (SerializationException e) {
         Console.WriteLine("Serialization failed. Reason: {0}", e.Message);
      }   
      finally {
         if (fs != null) fs.Close();
      }
   }
}
// The example displays the following output:
//       8/9/2014 7:30:00 PM Eastern Daylight Time
//       8/15/2014 7:00:00 PM Pacific Daylight Time
//       8/22/2014 7:30:00 PM Eastern Daylight Time
//       8/28/2014 7:00:00 PM Eastern Daylight Time

Poniższy przykład następnie wywołuje BinaryFormatter.Deserialize metody do deserializacji go.

using System;
using DateTimeExtensions;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Example
{
   private const string filename = @".\Schedule.bin";

   public static void Main()
   {
      FileStream fs;
      if (File.Exists(filename))
         fs = new FileStream(filename, FileMode.Open);
      else {
         Console.WriteLine("Unable to find file to deserialize.");
         return;
      }

      BinaryFormatter formatter = new BinaryFormatter();
      DateWithTimeZone[] dates;
      try {
         dates = (DateWithTimeZone[]) formatter.Deserialize(fs);
         // Display dates.
         foreach (var date in dates) {
            TimeZoneInfo tz = date.TimeZone;
            Console.WriteLine("{0} {1}", date.DateTime, 
                              tz.IsDaylightSavingTime(date.DateTime) ? 
                              tz.DaylightName : tz.StandardName);      
         }
      }
      catch (SerializationException e) {
         Console.WriteLine("Deserialization failed. Reason: {0}", e.Message);
      }   
      finally {
         if (fs != null) fs.Close();
      }
   }
}
// The example displays the following output:
//       8/9/2014 7:30:00 PM Eastern Daylight Time
//       8/15/2014 7:00:00 PM Pacific Daylight Time
//       8/22/2014 7:30:00 PM Eastern Daylight Time
//       8/28/2014 7:00:00 PM Eastern Daylight Time

A DateTime wartość, która jest przekazywany do aplikacji modelu COM, a następnie jest przenoszona z powrotem do aplikacji zarządzanych, jest nazywany przesyłania danych. Jednak DateTime nie ma wartość, która określa tylko raz obustronne, jak można by oczekiwać.

W przypadku przesyłania danych można tylko raz, takie jak o godzinie 3, końcowej daty i godziny 30 grudnia 1899 roku o 3:00, zamiast, 1 stycznia 0001 roku na 3:00 w dniu Dzieje się tak, ponieważ .NET Framework i COM założyć domyślnej daty, gdy jest określona tylko raz. Jednak COM system zakłada podstawowej dnia 30 grudnia 1899 r. N.E. podczas .NET Framework przyjmuje podstawowej daty, 1 stycznia 0001 r.

Gdy tylko godzina jest przekazywany z programu .NET Framework modelowi COM, specjalne przetwarzanie jest realizowane konwertujący czas do formatu używanego przez model COM. Gdy tylko godzina jest przekazywany z modelu COM programu .NET Framework, nie specjalne przetwarzanie jest realizowane ponieważ, który może spowodować uszkodzenie prawdziwym daty i godziny w lub przed 30 grudnia 1899. Oznacza to również, jeśli data rozpoczyna się jego przesyłania danych z modelu COM, .NET Framework i COM zachować daty.

Zachowanie środowiska .NET Framework i COM oznacza, że jeśli round-trips Twojej aplikacji DateTime określająca tylko raz, aplikacji należy pamiętać zmodyfikować lub zignorować błędnie datę z ostatnim DateTime obiektu.

Poniższy przykład ilustruje sposób porównać przybliżeniu równoważne DateTime wartości przyjmuje w niewielkim stopniu różnica podczas deklarowania ich równe.

using System;

class DateTimeTester 
{
   static bool RoughlyEquals(DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds)
   {
      long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds 
                                                     % frequencyInSeconds;

      delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;

      return Math.Abs(delta) < windowInSeconds;
	}

	public static void Main() 
	{
      int window = 10;
      int freq = 60 * 60 * 2; // 2 hours;

      DateTime d1 = DateTime.Now;

      DateTime d2 = d1.AddSeconds(2 * window);
      DateTime d3 = d1.AddSeconds(-2 * window);
      DateTime d4 = d1.AddSeconds(window / 2);
      DateTime d5 = d1.AddSeconds(-window / 2);

      DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
      DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
      DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
      DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

      Console.WriteLine("d1 ({0}) ~= d1 ({1}): {2}",
                        d1, d1, RoughlyEquals(d1, d1, window, freq));
      Console.WriteLine("d1 ({0}) ~= d2 ({1}): {2}", 
                        d1, d2, RoughlyEquals(d1, d2, window, freq));
      Console.WriteLine("d1 ({0}) ~= d3 ({1}): {2}", 
                        d1, d3, RoughlyEquals(d1, d3, window, freq));
      Console.WriteLine("d1 ({0}) ~= d4 ({1}): {2}", 
                        d1, d4, RoughlyEquals(d1, d4, window, freq));
      Console.WriteLine("d1 ({0}) ~= d5 ({1}): {2}", 
                        d1, d5, RoughlyEquals(d1, d5, window, freq));

      Console.WriteLine("d1 ({0}) ~= d6 ({1}): {2}", 
                        d1, d6, RoughlyEquals(d1, d6, window, freq));
      Console.WriteLine("d1 ({0}) ~= d7 ({1}): {2}", 
                        d1, d7, RoughlyEquals(d1, d7, window, freq));
      Console.WriteLine("d1 ({0}) ~= d8 ({1}): {2}", 
                        d1, d8, RoughlyEquals(d1, d8, window, freq));
      Console.WriteLine("d1 ({0}) ~= d9 ({1}): {2}", 
                        d1, d9, RoughlyEquals(d1, d9, window, freq));
	}
}
// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

Universal Windows Platform
Dostêpne od 8
.NET Framework
Dostêpne od 1.1
Portable Class Library
Obsługiwane w: portable .NET platforms
Silverlight
Dostêpne od 2.0
Windows Phone Silverlight
Dostêpne od 7.0
Windows Phone
Dostêpne od 8.1

Wszystkie elementy członkowskie tego typu są bezpieczne dla wątków. Elementy członkowskie, które wydają się modyfikują stan wystąpienia, w rzeczywistości zwracają nowe wystąpienie zainicjowane z nową wartością. Jako z innych typów odczytywanie i zapisywanie w udostępnionej zmiennej, która zawiera wystąpienie tego typu muszą być chronione przez blokadę w celu zagwarantowania bezpieczeństwa wątków.

System_CAPS_cautionPrzestroga

Przypisywanie wystąpienia tego typu nie jest bezpieczne wątkowo na wszystkich platformach sprzętowych, ponieważ reprezentacja binarna tego wystąpienia może być zbyt duża, aby przypisać w jednej niepodzielnej operacji.

Powrót do początku
Pokaż:
© 2016 Microsoft