DateTime, DateTimeOffset, TimeSpan 및 TimeZoneInfo 중 선택Choosing between DateTime, DateTimeOffset, TimeSpan, and TimeZoneInfo

날짜 및 시간 정보를 사용하는 .NET 애플리케이션은 매우 다양하며 해당 정보를 여러 가지 방법으로 사용할 수 있습니다..NET applications that use date and time information are very diverse and can use that information in several ways. 날짜 및 시간 정보를 사용하는 보다 일반적인 방법에는 다음 중 하나 이상이 포함됩니다.The more common uses of date and time information include one or more of the following:

  • 시간 정보가 중요하지 않도록 날짜만 반영합니다.To reflect a date only, so that time information is not important.

  • 날짜 정보가 중요하지 않도록 시간만 반영합니다.To reflect a time only, so that date information is not important.

  • 특정 시간과 장소에 연결되지 않은 추상 날짜와 시간을 반영합니다(예: 국제 체인의 상점은 대부분 평일 오전 9:00에 열림).To reflect an abstract date and time that is not tied to a specific time and place (for example, most stores in an international chain open on weekdays at 9:00 A.M.).

  • 일반적으로 날짜 및 시간 정보가 단순 데이터 형식으로 저장 되는 .NET 외부의 소스에서 날짜 및 시간 정보를 검색 합니다.To retrieve date and time information from sources outside of .NET, typically where date and time information is stored in a simple data type.

  • 단일 시점을 고유하고 명확하게 식별합니다.To uniquely and unambiguously identify a single point in time. 호스트 시스템에서만 날짜와 시간이 명확하면 되는 애플리케이션도 있고, 시스템 간에 명확해야 하는 애플리케이션도 있습니다(즉, 한 시스템에서 직렬화된 날짜를 다른 시스템에서 의미 있게 역직렬화하고 사용할 수 있음).Some applications require that a date and time be unambiguous only on the host system; others require that it be unambiguous across systems (that is, a date serialized on one system can be meaningfully deserialized and used on another system anywhere in the world).

  • 여러 개의 관련 시간(예: 요청자의 현지 시간 및 서버의 웹 요청 수신 시간)을 보존합니다.To preserve multiple related times (such as the requestor's local time and the server's time of receipt for a Web request).

  • 날짜 및 시간 산술 연산을 수행합니다(단일 시점을 고유하고 명확하게 식별하는 결과를 제공할 수 있음).To perform date and time arithmetic, possibly with a result that uniquely and unambiguously identifies a single point in time.

.NET에는 날짜 및 시간을 사용 하는 응용 프로그램을 빌드하는 데 사용할 수 있는 DateTime, DateTimeOffset, TimeSpanTimeZoneInfo 형식이 포함 되어 있습니다..NET includes the DateTime, DateTimeOffset, TimeSpan, and TimeZoneInfo types, all of which can be used to build applications that work with dates and times.

참고

이 항목에서는 해당 기능이 TimeZoneInfo 클래스에 거의 완전히 통합 되었기 때문에 TimeZone 설명 하지 않습니다.This topic doesn't discuss TimeZone because its functionality is almost entirely incorporated in the TimeZoneInfo class. 가능 하면 TimeZone 클래스 대신 TimeZoneInfo 클래스를 사용 합니다.Whenever possible, use the TimeZoneInfo class instead of the TimeZone class.

DateTime 구조체The DateTime structure

DateTime 값은 특정 날짜와 시간을 정의합니다.A DateTime value defines a particular date and time. 여기에는 해당 날짜와 시간이 속한 표준 시간대에 대 한 제한 된 정보를 제공 하는 Kind 속성이 포함 되어 있습니다.It includes a Kind property that provides limited information about the time zone to which that date and time belongs. DateTimeKind 값은 Kind 속성에서 반환된 값은 DateTime 값이 현지 시간(DateTimeKind.Local), UTC(협정 세계시)(DateTimeKind.Utc) 또는 지정되지 않은 시간(DateTimeKind.Unspecified)인지를 나타냅니다.The DateTimeKind value returned by the Kind property indicates whether the DateTime value represents the local time (DateTimeKind.Local), Coordinated Universal Time (UTC) (DateTimeKind.Utc), or an unspecified time (DateTimeKind.Unspecified).

DateTime 구조체는 다음을 수행하는 애플리케이션에 적합합니다.The DateTime structure is suitable for applications that do the following:

  • 날짜만 사용합니다.Work with dates only.

  • 시간만 사용합니다.Work with times only.

  • 추상 날짜와 시간을 사용합니다.Work with abstract dates and times.

  • 표준 시간대 정보가 없는 날짜 및 시간을 사용합니다.Work with dates and times for which time zone information is missing.

  • UTC 날짜 및 시간만 사용합니다.Work with UTC dates and times only.

  • SQL 데이터베이스와 같은 .NET 외부의 소스에서 날짜 및 시간 정보를 검색 합니다.Retrieve date and time information from sources outside of .NET, such as SQL databases. 일반적으로 이러한 소스는 DateTime 구조체와 호환되는 간단한 형식으로 날짜 및 시간 정보를 저장합니다.Typically, these sources store date and time information in a simple format that is compatible with the DateTime structure.

  • 날짜 및 시간 산술 연산을 수행하지만 일반적인 결과와 관련이 있습니다.Perform date and time arithmetic, but are concerned with general results. 예를 들어 특정 날짜와 시간에 6개월을 더하는 더하기 연산에서 일광 절약 시간제에 맞게 결과를 조정하는지 여부는 대체로 중요하지 않습니다.For example, in an addition operation that adds six months to a particular date and time, it is often not important whether the result is adjusted for daylight saving time.

특정 DateTime 값이 UTC를 나타내지 않는 경우 해당 날짜 및 시간 값은 대체로 모호하거나 이식성이 제한됩니다.Unless a particular DateTime value represents UTC, that date and time value is often ambiguous or limited in its portability. 예를 들어 DateTime 값이 현지 시간을 나타내는 경우 현지 표준 시간대 내에서 이식할 수 있습니다(즉, 동일한 표준 시간대의 다른 시스템에서 값을 역직렬화하는 경우 해당 값이 여전히 단일 시점을 명확하게 식별함).For example, if a DateTime value represents the local time, it is portable within that local time zone (that is, if the value is deserialized on another system in the same time zone, that value still unambiguously identifies a single point in time). 현지 표준 시간대 외부에서는 해당 DateTime 값이 여러 가지로 해석될 수 있습니다.Outside the local time zone, that DateTime value can have multiple interpretations. 값의 Kind 속성이 DateTimeKind.Unspecified이면 이식성이 훨씬 감소합니다. 이제 동일한 표준 시간대 내에서 모호하며 처음 직렬화된 시스템에서도 모호할 수 있습니다.If the value's Kind property is DateTimeKind.Unspecified, it is even less portable: it is now ambiguous within the same time zone and possibly even on the same system on which it was first serialized. DateTime 값이 UTC를 나타내는 경우에만 값이 사용되는 시스템이나 표준 시간대에 관계없이 단일 시점을 명확하게 식별합니다.Only if a DateTime value represents UTC does that value unambiguously identify a single point in time regardless of the system or time zone in which the value is used.

중요

DateTime 데이터를 저장하거나 공유하는 경우 UTC를 사용해야 하며 DateTime 값의 Kind 속성을 DateTimeKind.Utc로 설정해야 합니다.When saving or sharing DateTime data, UTC should be used and the DateTime value's Kind property should be set to DateTimeKind.Utc.

DateTimeOffset 구조체The DateTimeOffset structure

DateTimeOffset 구조체는 날짜 및 시간 값과 해당 값이 UTC와 다른 정도를 나타내는 오프셋을 나타냅니다.The DateTimeOffset structure represents a date and time value, together with an offset that indicates how much that value differs from UTC. 따라서 값이 항상 단일 시점을 명확하게 식별합니다.Thus, the value always unambiguously identifies a single point in time.

DateTimeOffset 형식에는 DateTime 형식의 모든 기능과 표준 시간대 인식 기능이 포함됩니다.The DateTimeOffset type includes all of the functionality of the DateTime type along with time zone awareness. 이렇게 하면 다음을 수행 하는 응용 프로그램에 적합 합니다.This makes it suitable for applications that do the following:

  • 단일 시점을 고유하고 명확하게 식별합니다.Uniquely and unambiguously identify a single point in time. DateTimeOffset 형식을 통해 “now"의 의미를 명확하게 정의하고, 트랜잭션 시간을 기록하고, 시스템 또는 애플리케이션 이벤트의 시간을 기록하고, 파일을 만든 시간과 수정 시간을 기록할 수 있습니다.The DateTimeOffset type can be used to unambiguously define the meaning of "now", to log transaction times, to log the times of system or application events, and to record file creation and modification times.

  • 일반적인 날짜 및 시간 산술 연산을 수행합니다.Perform general date and time arithmetic.

  • 시간이 두 개의 개별 값으로 저장되거나 한 구조체의 두 멤버로 저장된 경우 관련된 여러 시간을 보존합니다.Preserve multiple related times, as long as those times are stored as two separate values or as two members of a structure.

참고

DateTimeOffset 값의 사용은 DateTime 값의 사용보다 훨씬 더 일반적입니다.These uses for DateTimeOffset values are much more common than those for DateTime values. 따라서 DateTimeOffset 을 애플리케이션 개발의 기본 날짜 및 시간 형식으로 간주해야 합니다.As a result, DateTimeOffset should be considered the default date and time type for application development.

DateTimeOffset 값은 특정 표준 시간대와 연결되지 않고 다양한 표준 시간대에서 발생할 수 있습니다.A DateTimeOffset value is not tied to a particular time zone, but can originate from any of a variety of time zones. 이를 설명하기 위해 다음 예제에서는 많은 DateTimeOffset 값(현지 태평양 표준시 포함)이 속할 수 있는 표준 시간대를 나열합니다.To illustrate this, the following example lists the time zones to which a number of DateTimeOffset values (including a local Pacific Standard Time) can belong.

using System;
using System.Collections.ObjectModel;

public class TimeOffsets
{
   public static void Main()
   {
      DateTime thisDate = new DateTime(2007, 3, 10, 0, 0, 0);
      DateTime dstDate = new DateTime(2007, 6, 10, 0, 0, 0);
      DateTimeOffset thisTime;
      
      thisTime = new DateTimeOffset(dstDate, new TimeSpan(-7, 0, 0));
      ShowPossibleTimeZones(thisTime);

      thisTime = new DateTimeOffset(thisDate, new TimeSpan(-6, 0, 0));  
      ShowPossibleTimeZones(thisTime);

      thisTime = new DateTimeOffset(thisDate, new TimeSpan(+1, 0, 0));
      ShowPossibleTimeZones(thisTime);
   }

   private static void ShowPossibleTimeZones(DateTimeOffset offsetTime)
   {
      TimeSpan offset = offsetTime.Offset;
      ReadOnlyCollection<TimeZoneInfo> timeZones;
            
      Console.WriteLine("{0} could belong to the following time zones:", 
                        offsetTime.ToString());
      // Get all time zones defined on local system
      timeZones = TimeZoneInfo.GetSystemTimeZones();     
      // Iterate time zones 
      foreach (TimeZoneInfo timeZone in timeZones)
      {
         // Compare offset with offset for that date in that time zone
         if (timeZone.GetUtcOffset(offsetTime.DateTime).Equals(offset))
            Console.WriteLine("   {0}", timeZone.DisplayName);
      }
      Console.WriteLine();
   } 
}
// This example displays the following output to the console:
//       6/10/2007 12:00:00 AM -07:00 could belong to the following time zones:
//          (GMT-07:00) Arizona
//          (GMT-08:00) Pacific Time (US & Canada)
//          (GMT-08:00) Tijuana, Baja California
//       
//       3/10/2007 12:00:00 AM -06:00 could belong to the following time zones:
//          (GMT-06:00) Central America
//          (GMT-06:00) Central Time (US & Canada)
//          (GMT-06:00) Guadalajara, Mexico City, Monterrey - New
//          (GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
//          (GMT-06:00) Saskatchewan
//       
//       3/10/2007 12:00:00 AM +01:00 could belong to the following time zones:
//          (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
//          (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
//          (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
//          (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
//          (GMT+01:00) West Central Africa
Imports System.Collections.ObjectModel

Module TimeOffsets
   Public Sub Main()
      Dim thisTime As DateTimeOffset 
      
      thisTime = New DateTimeOffset(#06/10/2007#, New TimeSpan(-7, 0, 0))
      ShowPossibleTimeZones(thisTime) 

      thisTime = New DateTimeOffset(#03/10/2007#, New TimeSpan(-6, 0, 0))  
      ShowPossibleTimeZones(thisTime)

      thisTime = New DateTimeOffset(#03/10/2007#, New TimeSpan(+1, 0, 0))
      ShowPossibleTimeZones(thisTime)
   End Sub
   
   Private Sub ShowPossibleTimeZones(offsetTime As DateTimeOffset)
      Dim offset As TimeSpan = offsetTime.Offset
      Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo)
            
      Console.WriteLine("{0} could belong to the following time zones:", _
                        offsetTime.ToString())
      ' Get all time zones defined on local system
      timeZones = TimeZoneInfo.GetSystemTimeZones()     
      ' Iterate time zones
      For Each timeZone As TimeZoneInfo In timeZones
         ' Compare offset with offset for that date in that time zone
         If timeZone.GetUtcOffset(offsetTime.DateTime).Equals(offset) Then
            Console.WriteLine("   {0}", timeZone.DisplayName)
         End If   
      Next
      Console.WriteLine()
   End Sub
End Module
' This example displays the following output to the console:
'       6/10/2007 12:00:00 AM -07:00 could belong to the following time zones:
'          (GMT-07:00) Arizona
'          (GMT-08:00) Pacific Time (US & Canada)
'          (GMT-08:00) Tijuana, Baja California
'       
'       3/10/2007 12:00:00 AM -06:00 could belong to the following time zones:
'          (GMT-06:00) Central America
'          (GMT-06:00) Central Time (US & Canada)
'          (GMT-06:00) Guadalajara, Mexico City, Monterrey - New
'          (GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
'          (GMT-06:00) Saskatchewan
'       
'       3/10/2007 12:00:00 AM +01:00 could belong to the following time zones:
'          (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
'          (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
'          (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
'          (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
'          (GMT+01:00) West Central Africa

출력은 이 예제의 각 날짜 및 시간 값이 세 개 이상의 표준 시간대에 속할 수 있음을 보여 줍니다.The output shows that each date and time value in this example can belong to at least three different time zones. DateTimeOffset 값 6/10/2007은 날짜 및 시간 값이 일광 절약 시간제를 나타내는 경우 UTC에서의 오프셋이 시작 표준 시간대의 기본 UTC 오프셋이나 표시 이름에 있는 UTC에서의 오프셋과 일치하지 않을 수도 있음을 보여 줍니다.The DateTimeOffset value of 6/10/2007 shows that if a date and time value represents a daylight saving time, its offset from UTC does not even necessarily correspond to the originating time zone's base UTC offset or to the offset from UTC found in its display name. 즉, 단일 DateTimeOffset 값은 해당 표준 시간대와 긴밀히 연결되어 있지 않으므로 표준 시간대의 일광 절약 시간제 전환을 반영할 수 없습니다.This means that, because a single DateTimeOffset value is not tightly coupled with its time zone, it cannot reflect a time zone's transition to and from daylight saving time. 이는 날짜 및 시간 산술 연산을 사용하여 DateTimeOffset 값을 조작하는 경우에 특히 문제가 될 수 있습니다.This can be particularly problematic when date and time arithmetic is used to manipulate a DateTimeOffset value. 표준 시간대의 조정 규칙을 고려하는 방식으로 날짜 및 시간 산술 연산을 수행하는 방법에 대한 자세한 내용은 날짜 및 시간으로 산술 연산 수행을 참조하십시오.For a discussion of how to perform date and time arithmetic in a way that takes account of a time zone's adjustment rules, see Performing arithmetic operations with dates and times.

TimeSpan 구조체The TimeSpan structure

TimeSpan 구조체는 시간 간격을 나타냅니다.The TimeSpan structure represents a time interval. 일반적으로 다음 두 가지 용도로 사용됩니다.Its two typical uses are:

  • 두 개의 날짜 및 시간 값의 시간 간격을 반영합니다.Reflecting the time interval between two date and time values. 예를 들어 다른 값에서 DateTime 값을 빼면 TimeSpan 값이 반환됩니다.For example, subtracting one DateTime value from another returns a TimeSpan value.

  • 경과 시간을 측정합니다.Measuring elapsed time. 예를 들어 Stopwatch.Elapsed 속성은 경과 시간 측정을 시작 하는 Stopwatch 메서드 중 하나를 호출한 후 경과 된 시간 간격을 반영 하는 TimeSpan 값을 반환 합니다.For example, the Stopwatch.Elapsed property returns a TimeSpan value that reflects the time interval that has elapsed since the call to one of the Stopwatch methods that begins to measure elapsed time.

TimeSpan 값은 특정 날짜에 대 한 참조 없이 시간을 반영 하는 DateTime 값에 대 한 대체 값으로 사용 될 수도 있습니다.A TimeSpan value can also be used as a replacement for a DateTime value when that value reflects a time without reference to a particular day. 이 사용법은 DateTime.TimeOfDayDateTimeOffset.TimeOfDay 속성과 비슷하며 날짜를 참조 하지 않고 시간을 나타내는 TimeSpan 값을 반환 합니다.This usage is similar to the DateTime.TimeOfDay and DateTimeOffset.TimeOfDay properties, which return a TimeSpan value that represents the time without reference to a date. 예를 들어 TimeSpan 구조체를 사용하여 매일 상점을 여는 시간 또는 닫는 시간을 반영하거나 정기 이벤트가 발생하는 시간을 나타낼 수 있습니다.For example, the TimeSpan structure can be used to reflect a store's daily opening or closing time, or it can be used to represent the time at which any regular event occurs.

다음 예제에서는 상점을 여는 시간과 닫는 시간에 사용되는 StoreInfo 개체와 상점의 표준 시간대를 나타내는 TimeSpan 개체가 포함된 TimeZoneInfo 구조체를 정의합니다.The following example defines a StoreInfo structure that includes TimeSpan objects for store opening and closing times, as well as a TimeZoneInfo object that represents the store's time zone. 구조체에는 현지 표준 시간대에 있는 것으로 가정되는 사용자가 지정한 시간에 상점이 열려 있는지 여부를 나타내는 IsOpenNowIsOpenAt의 두 메서드도 포함됩니다.The structure also includes two methods, IsOpenNow and IsOpenAt, that indicates whether the store is open at a time specified by the user, who is assumed to be in the local time zone.

using System;

public struct StoreInfo
{
   public String store;
   public TimeZoneInfo tz;
   public TimeSpan open;
   public TimeSpan close;

   public bool IsOpenNow()
   {
      return IsOpenAt(DateTime.Now.TimeOfDay);
   }
   
   public bool IsOpenAt(TimeSpan time)
   {
      TimeZoneInfo local = TimeZoneInfo.Local;
      TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset;

      // Is the store in the same time zone?
      if (tz.Equals(local)) {
         return time >= open & time <= close;
      }
      else {
         TimeSpan delta = TimeSpan.Zero;
         TimeSpan storeDelta = TimeSpan.Zero;
         
         // Is it daylight saving time in either time zone?
         if (local.IsDaylightSavingTime(DateTime.Now.Date + time))
            delta = local.GetAdjustmentRules()[local.GetAdjustmentRules().Length - 1].DaylightDelta;

         if (tz.IsDaylightSavingTime(TimeZoneInfo.ConvertTime(DateTime.Now.Date + time, local, tz)))
            storeDelta = tz.GetAdjustmentRules()[local.GetAdjustmentRules().Length - 1].DaylightDelta;

         TimeSpan comparisonTime = time + (offset - tz.BaseUtcOffset).Negate() + (delta - storeDelta).Negate();
         return comparisonTime >= open & comparisonTime <= close;
      }
   }
}
Public Structure StoreInfo
   Dim store As String
   Dim tz As TimeZoneInfo
   Dim open As TimeSpan
   Dim close As TimeSpan

   Public Function IsOpenNow() As Boolean
      Return IsOpenAt(Date.Now.TimeOfDay)
   End Function
   
   Public Function IsOpenAt(time As TimeSpan) As Boolean
      Dim local As TimeZoneInfo = TimeZoneInfo.Local
      Dim offset As TimeSpan = TimeZoneInfo.Local.BaseUtcOffset

      ' Is the store in the same time zone?
      If tz.Equals(local) Then
         Return time >= open And time <= close
      Else
         Dim delta As TimeSpan = TimeSpan.Zero
         Dim storeDelta As TimeSpan = TimeSpan.Zero
         
         ' Is it daylight saving time in either time zone?
         If local.IsDaylightSavingTime(Date.Now.Date + time) Then
            delta = local.GetAdjustmentRules(local.GetAdjustmentRules().Length - 1).DaylightDelta
         End If
         If tz.IsDaylightSavingTime(TimeZoneInfo.ConvertTime(Date.Now.Date + time, local, tz))
            storeDelta = tz.GetAdjustmentRules(local.GetAdjustmentRules().Length - 1).DaylightDelta
         End If
         Dim comparisonTime As TimeSpan = time + (offset - tz.BaseUtcOffset).Negate() + (delta - storeDelta).Negate
         Return (comparisonTime >= open And comparisonTime <= close)
      End If
   End Function
End Structure

StoreInfo 구조체는 클라이언트 코드에서 다음과 같이 사용될 수 있습니다.The StoreInfo structure can then be used by client code like the following.

public class Example
{
   public static void Main()
   {
      // Instantiate a StoreInfo object.
      var store103 = new StoreInfo();
      store103.store = "Store #103";
      store103.tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
      // Store opens at 8:00.
      store103.open = new TimeSpan(8, 0, 0);
      // Store closes at 9:30.
      store103.close = new TimeSpan(21, 30, 0);
      
      Console.WriteLine("Store is open now at {0}: {1}",
                        DateTime.Now.TimeOfDay, store103.IsOpenNow());
      TimeSpan[] times = { new TimeSpan(8, 0, 0), new TimeSpan(21, 0, 0),
                           new TimeSpan(4, 59, 0), new TimeSpan(18, 31, 0) };
      foreach (var time in times)
         Console.WriteLine("Store is open at {0}: {1}",
                           time, store103.IsOpenAt(time));
   }
}
// The example displays the following output:
//       Store is open now at 15:29:01.6129911: True
//       Store is open at 08:00:00: True
//       Store is open at 21:00:00: False
//       Store is open at 04:59:00: False
//       Store is open at 18:31:00: False
Module Example
   Public Sub Main()
      ' Instantiate a StoreInfo object.
      Dim store103 As New StoreInfo()
      store103.store = "Store #103"
      store103.tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
      ' Store opens at 8:00.
      store103.open = new TimeSpan(8, 0, 0)
      ' Store closes at 9:30.
      store103.close = new TimeSpan(21, 30, 0)
      
      Console.WriteLine("Store is open now at {0}: {1}",
                        Date.Now.TimeOfDay, store103.IsOpenNow())
      Dim times() As TimeSpan = { New TimeSpan(8, 0, 0),
                                  New TimeSpan(21, 0, 0),
                                  New TimeSpan(4, 59, 0),
                                  New TimeSpan(18, 31, 0) }
      For Each time In times
         Console.WriteLine("Store is open at {0}: {1}",
                           time, store103.IsOpenAt(time))
      Next
   End Sub
End Module
' The example displays the following output:
'       Store is open now at 15:29:01.6129911: True
'       Store is open at 08:00:00: True
'       Store is open at 21:00:00: False
'       Store is open at 04:59:00: False
'       Store is open at 18:31:00: False

TimeZoneInfo 클래스The TimeZoneInfo class

TimeZoneInfo class represents any of the Earth's time zones, and enables the conversion of any date and time in one time zone to its equivalent in another time zone.The TimeZoneInfo class represents any of the Earth's time zones, and enables the conversion of any date and time in one time zone to its equivalent in another time zone. TimeZoneInfo 클래스를 사용하면 모든 날짜 및 시간 값이 명확하게 단일 시점을 식별하도록 날짜 및 시간 작업을 할 수 있습니다.The TimeZoneInfo class makes it possible to work with dates and times so that any date and time value unambiguously identifies a single point in time. TimeZoneInfo 클래스는 확장도 가능합니다.The TimeZoneInfo class is also extensible. Windows 시스템에 대해 제공되고 레지스트리에 정의된 표준 시간대 정보에 따라 달라지지만 사용자 지정 표준 시간대 생성을 지원합니다.Although it depends on time zone information provided for Windows systems and defined in the registry, it supports the creation of custom time zones. 또한 표준 시간대 정보의 직렬화 및 역직렬화를 지원합니다.It also supports the serialization and deserialization of time zone information.

TimeZoneInfo 클래스를 완전히 활용하기 위해 추가 개발 작업이 필요한 경우도 있습니다.In some cases, taking full advantage of the TimeZoneInfo class may require further development work. 날짜 및 시간 값이 속해 있는 표준 시간대와 긴밀 하 게 연결 되지 않은 경우에는 추가 작업이 필요 합니다.If date and time values are not tightly coupled with the time zones to which they belong, further work is required. 응용 프로그램에서 날짜 및 시간을 관련 표준 시간대와 연결 하기 위한 몇 가지 메커니즘을 제공 하지 않는 한 특정 날짜 및 시간 값이 표준 시간대에서 분리 될 수 있습니다.Unless your application provides some mechanism for linking a date and time with its associated time zone, it's easy for a particular date and time value to become disassociated from its time zone. 이 정보를 연결하는 한 가지 방법으로 날짜 및 시간 값, 그리고 연결되는 표준 시간대 개체를 둘 다 포함하는 클래스나 구조체를 정의합니다.One method of linking this information is to define a class or structure that contains both the date and time value and its associated time zone object.

날짜 및 시간 개체를 인스턴스화할 때 날짜 및 시간 값이 속하는 표준 시간대가 알려진 경우에만 .NET의 표준 시간대 지원을 활용할 수 있습니다.Taking advantage of time zone support in .NET is possible only if the time zone to which a date and time value belongs is known when that date and time object is instantiated. 웹 또는 네트워크 애플리케이션에서는 특히 알 수 없는 경우가 많습니다.This is often not the case, particularly in Web or network applications.

참조See also