DateTime과 DateTimeOffset 간 변환

DateTimeOffset 구조는 DateTime 구조보다 더 높은 수준의 표준 시간대 인식을 제공하지만 DateTime 매개 변수는 메서드 호출에서 더 일반적으로 사용됩니다. 이 접근 방식 때문에 DateTimeOffset 값을 DateTime 값으로 변환하는 기능도 중요합니다. 이 항목에서는 표준 시간대 정보를 최대한 많이 보존하는 방식으로 이러한 변환을 수행하는 방법을 보여 줍니다.

참고 항목

DateTimeDateTimeOffset 형식 모두 표준 시간대의 시간을 나타낼 때 몇 가지 제한 사항이 있습니다. Kind 속성을 사용하면 DateTime UTC(협정 세계시)와 시스템의 현지 표준 시간대만 반영할 수 있습니다. DateTimeOffset은(는) UTC의 시간 오프셋을 반영하지만 해당 오프셋이 속한 실제 표준 시간대는 반영되지 않습니다. 표준 시간대의 시간 값 및 지원에 대한 자세한 내용은 DateTime, DateTimeOffset, TimeSpan 및 TimeZoneInfo 중 선택을 참조하십시오.

DateTime에서 DateTimeOffset으로 변환

DateTimeOffset 구조체는 대부분의 변환에 적합한 DateTimeOffset 변환에 DateTime을(를) 수행하는 두 가지 동등한 방법을 제공합니다.

UTC 및 로컬 DateTime 값의 경우 결과 DateTimeOffset 값의 Offset 속성은 UTC 또는 현지 표준 시간대 오프셋을 정확하게 반영합니다. 예를 들어 다음 코드는 UTC 시간을 해당하는 DateTimeOffset 값으로 변환합니다.

DateTime utcTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
utcTime1 = DateTime.SpecifyKind(utcTime1, DateTimeKind.Utc);
DateTimeOffset utcTime2 = utcTime1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}",
                  utcTime1,
                  utcTime1.Kind,
                  utcTime2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Utc to a DateTimeOffset value of 6/19/2008 7:00:00 AM +00:00
Dim utcTime1 As Date = Date.SpecifyKind(#06/19/2008 7:00AM#, _
                                        DateTimeKind.Utc)
Dim utcTime2 As DateTimeOffset = utcTime1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  utcTime1, _
                  utcTime1.Kind.ToString(), _
                  utcTime2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Utc to a DateTimeOffset value of 6/19/2008 7:00:00 AM +00:00                        

이 경우 utcTime2 변수의 오프셋은 00:00입니다. 마찬가지로 다음 코드는 현지 시간을 해당하는 DateTimeOffset 값으로 변환합니다.

DateTime localTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
localTime1 = DateTime.SpecifyKind(localTime1, DateTimeKind.Local);
DateTimeOffset localTime2 = localTime1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}",
                  localTime1,
                  localTime1.Kind,
                  localTime2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Local to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00
Dim localTime1 As Date = Date.SpecifyKind(#06/19/2008 7:00AM#, DateTimeKind.Local)
Dim localTime2 As DateTimeOffset = localTime1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  localTime1, _
                  localTime1.Kind.ToString(), _
                  localTime2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Local to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00

그러나 Kind의 속성이 DateTimeKind.UnspecifiedDateTime 값의 경우 이러한 두 변환 메서드는 현지 표준 시간대의 오프셋인 DateTimeOffset 값을 생성합니다. 변환은 미국에서 실행되는 다음 예제에 나와 있습니다. 태평양 표준시:

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);  // Kind is DateTimeKind.Unspecified
DateTimeOffset time2 = time1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}",
                  time1,
                  time1.Kind,
                  time2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00
Dim time1 As Date = #06/19/2008 7:00AM#      ' Kind is DateTimeKind.Unspecified
Dim time2 As DateTimeOffset = time1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  time1, _
                  time1.Kind.ToString(), _
                  time2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00

DateTime 값이 현지 표준 시간대 또는 UTC 이외의 날짜와 시간을 반영하는 경우 오버로드된 DateTimeOffset 생성자를 호출하여 DateTimeOffset 값으로 변환하고 표준 시간대 정보를 유지할 수 있습니다. 예를 들어 다음 예제에서는 Central Standard Time을 반영하는 DateTimeOffset 개체를 인스턴스화합니다.

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);     // Kind is DateTimeKind.Unspecified
try
{
   DateTimeOffset time2 = new DateTimeOffset(time1,
                  TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(time1));
   Console.WriteLine("Converted {0} {1} to a DateTime value of {2}",
                     time1,
                     time1.Kind,
                     time2);
}
// Handle exception if time zone is not defined in registry
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to identify target time zone for conversion.");
}
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTime value of 6/19/2008 7:00:00 AM -05:00
Dim time1 As Date = #06/19/2008 7:00AM#      ' Kind is DateTimeKind.Unspecified
Try
    Dim time2 As New DateTimeOffset(time1, _
                     TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(time1))
    Console.WriteLine("Converted {0} {1} to a DateTime value of {2}", _
                      time1, _
                      time1.Kind.ToString(), _
                      time2)
    ' Handle exception if time zone is not defined in registry
Catch e As TimeZoneNotFoundException
    Console.WriteLine("Unable to identify target time zone for conversion.")
End Try
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTime value of 6/19/2008 7:00:00 AM -05:00

이 생성자 오버로드에 대한 두 번째 매개 변수는 UTC의 시간 오프셋을 나타내는 TimeSpan 개체입니다. 해당 표준 시간대의 TimeZoneInfo.GetUtcOffset(DateTime) 메서드를 호출하여 검색합니다. 메서드의 단일 매개 변수는 변환할 날짜 및 시간을 나타내는 DateTime 값입니다. 표준 시간대에서 일광 절약 시간제를 지원하는 경우 이 매개 변수를 사용하면 특정 날짜와 시간에 적절한 오프셋을 해당 메서드에서 결정할 수 있습니다.

DateTimeOffset에서 DateTime으로 변환

DateTime 속성은 DateTime 변환에 DateTimeOffset을(를) 수행하는 데 가장 일반적으로 사용됩니다. 그러나 다음 예제와 같이 Kind 속성이 UnspecifiedDateTime 값을 반환합니다.

DateTime baseTime = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset sourceTime;
DateTime targetTime;

// Convert UTC to DateTime value
sourceTime = new DateTimeOffset(baseTime, TimeSpan.Zero);
targetTime = sourceTime.DateTime;
Console.WriteLine("{0} converts to {1} {2}",
                  sourceTime,
                  targetTime,
                  targetTime.Kind);

// Convert local time to DateTime value
sourceTime = new DateTimeOffset(baseTime,
                                TimeZoneInfo.Local.GetUtcOffset(baseTime));
targetTime = sourceTime.DateTime;
Console.WriteLine("{0} converts to {1} {2}",
                  sourceTime,
                  targetTime,
                  targetTime.Kind);

// Convert Central Standard Time to a DateTime value
try
{
   TimeSpan offset = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(baseTime);
   sourceTime = new DateTimeOffset(baseTime, offset);
   targetTime = sourceTime.DateTime;
   Console.WriteLine("{0} converts to {1} {2}",
                     sourceTime,
                     targetTime,
                     targetTime.Kind);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to create DateTimeOffset based on U.S. Central Standard Time.");
}
// This example displays the following output to the console:
//    6/19/2008 7:00:00 AM +00:00 converts to 6/19/2008 7:00:00 AM Unspecified
//    6/19/2008 7:00:00 AM -07:00 converts to 6/19/2008 7:00:00 AM Unspecified
//    6/19/2008 7:00:00 AM -05:00 converts to 6/19/2008 7:00:00 AM Unspecified
Const baseTime As Date = #06/19/2008 7:00AM#
Dim sourceTime As DateTimeOffset
Dim targetTime As Date

' Convert UTC to DateTime value
sourceTime = New DateTimeOffset(baseTime, TimeSpan.Zero)
targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())

' Convert local time to DateTime value
sourceTime = New DateTimeOffset(baseTime, _
                                TimeZoneInfo.Local.GetUtcOffset(baseTime))
targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())

' Convert Central Standard Time to a DateTime value
Try
    Dim offset As TimeSpan = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(baseTime)
    sourceTime = New DateTimeOffset(baseTime, offset)
    targetTime = sourceTime.DateTime
    Console.WriteLine("{0} converts to {1} {2}", _
                      sourceTime, _
                      targetTime, _
                      targetTime.Kind.ToString())
Catch e As TimeZoneNotFoundException
    Console.WriteLine("Unable to create DateTimeOffset based on U.S. Central Standard Time.")
End Try
' This example displays the following output to the console:
'    6/19/2008 7:00:00 AM +00:00 converts to 6/19/2008 7:00:00 AM Unspecified
'    6/19/2008 7:00:00 AM -07:00 converts to 6/19/2008 7:00:00 AM Unspecified
'    6/19/2008 7:00:00 AM -05:00 converts to 6/19/2008 7:00:00 AM Unspecified                       

앞의 예제에서는 DateTime 속성을 사용할 때 변환을 통해 DateTimeOffset 값과 UTC의 관계에 대한 정보가 손실되는 것을 보여 줍니다. 또한 이 동작은 DateTime 구조가 Kind 속성의 두 표준 시간대만 반영하기 때문에 UTC 시간 또는 시스템의 현지 시간에 해당하는 DateTimeOffset 값에도 영향을 줍니다.

DateTimeOffset을(를) DateTime 값으로 변환할 때 가능한 한 많은 표준 시간대 정보를 유지하려면 DateTimeOffset.UtcDateTimeDateTimeOffset.LocalDateTime 속성을 사용할 수 있습니다.

UTC 시간 변환

변환된 DateTime 값이 UTC 시간임을 나타내기 위해 DateTimeOffset.UtcDateTime 속성의 값을 검색할 수 있습니다. 두 가지 면에서 DateTime 속성과 다릅니다.

참고 항목

애플리케이션에서 변환된 DateTime 값이 단일 시점을 명확하게 식별하도록 요구하는 경우 DateTimeOffset.UtcDateTime 속성을 사용하여 DateTime 변환에 대한 모든 DateTimeOffset을(를) 처리하는 것이 좋습니다.

다음 코드는 UtcDateTime 속성을 사용하여 오프셋이 TimeSpan.Zero와(과) DateTime의 값과 같은 DateTimeOffset 값을 변환합니다.

DateTimeOffset utcTime1 = new DateTimeOffset(2008, 6, 19, 7, 0, 0, TimeSpan.Zero);
DateTime utcTime2 = utcTime1.UtcDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  utcTime1,
                  utcTime2,
                  utcTime2.Kind);
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
Dim utcTime1 As New DateTimeOffset(#06/19/2008 7:00AM#, TimeSpan.Zero)
Dim utcTime2 As Date = utcTime1.UtcDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime1, _
                  utcTime2, _
                  utcTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc                              

다음 코드는 UtcDateTime 속성을 사용하여 표준 시간대 변환과 DateTimeOffset 값의 형식 변환을 모두 수행합니다.

DateTimeOffset originalTime = new DateTimeOffset(2008, 6, 19, 7, 0, 0, new TimeSpan(5, 0, 0));
DateTime utcTime = originalTime.UtcDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  originalTime,
                  utcTime,
                  utcTime.Kind);
// The example displays the following output to the console:
//       6/19/2008 7:00:00 AM +05:00 converted to 6/19/2008 2:00:00 AM Utc
Dim originalTime As New DateTimeOffset(#6/19/2008 7:00AM#, _
                                       New TimeSpan(5, 0, 0))
Dim utcTime As Date = originalTime.UtcDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalTime, _
                  utcTime, _
                  utcTime.Kind.ToString())
' The example displays the following output to the console:
'       6/19/2008 7:00:00 AM +05:00 converted to 6/19/2008 2:00:00 AM Utc

현지 시간 변환

DateTimeOffset 값이 현지 시간을 나타낸다는 것을 나타내기 위해 DateTimeOffset.DateTime 속성에서 반환된 DateTime 값을 static (Visual Basic의Shared) SpecifyKind 메서드에 전달할 수 있습니다. 메서드는 전달된 날짜와 시간을 첫 번째 매개 변수로 반환하지만 Kind 속성을 두 번째 매개 변수로 지정된 값으로 설정합니다. 다음 코드는 오프셋이 현지 표준 시간대의 오프셋에 해당하는 DateTimeOffset 값을 변환할 때 SpecifyKind 메서드를 사용합니다.

DateTime sourceDate = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset utcTime1 = new DateTimeOffset(sourceDate,
                          TimeZoneInfo.Local.GetUtcOffset(sourceDate));
DateTime utcTime2 = utcTime1.DateTime;
if (utcTime1.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(utcTime1.DateTime)))
   utcTime2 = DateTime.SpecifyKind(utcTime2, DateTimeKind.Local);

Console.WriteLine("{0} converted to {1} {2}",
                  utcTime1,
                  utcTime2,
                  utcTime2.Kind);
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
Dim sourceDate As Date = #06/19/2008 7:00AM#
Dim utcTime1 As New DateTimeOffset(sourceDate, _
                                   TimeZoneInfo.Local.GetUtcOffset(sourceDate))
Dim utcTime2 As Date = utcTime1.DateTime
If utcTime1.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(utcTime1.DateTime)) Then
    utcTime2 = DateTime.SpecifyKind(utcTime2, DateTimeKind.Local)
End If
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime1, _
                  utcTime2, _
                  utcTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      

DateTimeOffset.LocalDateTime 속성을 사용하여 DateTimeOffset 값을 로컬 DateTime 값으로 변환할 수도 있습니다. 반환된 DateTime 값의 Kind 속성은 Local입니다. 다음 코드에서는 오프셋이 현지 표준 시간대에 해당하는 DateTimeOffset 값을 변환할 때 DateTimeOffset.LocalDateTime 속성을 사용합니다.

DateTime sourceDate = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset localTime1 = new DateTimeOffset(sourceDate,
                          TimeZoneInfo.Local.GetUtcOffset(sourceDate));
DateTime localTime2 = localTime1.LocalDateTime;

Console.WriteLine("{0} converted to {1} {2}",
                  localTime1,
                  localTime2,
                  localTime2.Kind);
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
Dim sourceDate As Date = #06/19/2008 7:00AM#
Dim localTime1 As New DateTimeOffset(sourceDate, _
                                   TimeZoneInfo.Local.GetUtcOffset(sourceDate))
Dim localTime2 As Date = localTime1.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  localTime1, _
                  localTime2, _
                  localTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      

DateTimeOffset.LocalDateTime 속성을 사용하여 DateTime 값을 검색하는 경우 속성의 get 접근자가 먼저 DateTimeOffset 값을 UTC로 변환한 다음 ToLocalTime 메서드를 호출하여 현지 시간으로 변환합니다. 이 동작은 DateTimeOffset.LocalDateTime 속성에서 값을 검색하여 형식 변환을 수행하는 동시에 표준 시간대 변환을 수행할 수 있음을 의미합니다. 또한 변환을 수행할 때 현지 표준 시간대의 조정 규칙도 적용됩니다. 다음 코드에서는 DateTimeOffset.LocalDateTime 속성을 사용하여 형식과 표준 시간대 변환을 모두 수행하는 방법을 보여 줍니다. 샘플 출력은 태평양 표준 시간대(미국 및 캐나다)로 설정된 머신에 대한 것입니다. 11월 날짜는 태평양 표준시(UTC-8)이며, 6월 날짜는 일광 절약 시간(UTC-7)입니다.

DateTimeOffset originalDate;
DateTime localDate;

// Convert time originating in a different time zone
originalDate = new DateTimeOffset(2008, 6, 18, 7, 0, 0,
                                  new TimeSpan(-5, 0, 0));
localDate = originalDate.LocalDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  originalDate,
                  localDate,
                  localDate.Kind);
// Convert time originating in a different time zone
// so local time zone's adjustment rules are applied
originalDate = new DateTimeOffset(2007, 11, 4, 4, 0, 0,
                                  new TimeSpan(-5, 0, 0));
localDate = originalDate.LocalDateTime;
Console.WriteLine("{0} converted to {1} {2}",
                  originalDate,
                  localDate,
                  localDate.Kind);
// The example displays the following output to the console,
// when you run it on a machine that is set to Pacific Time (US & Canada):
//       6/18/2008 7:00:00 AM -05:00 converted to 6/18/2008 5:00:00 AM Local
//       11/4/2007 4:00:00 AM -05:00 converted to 11/4/2007 1:00:00 AM Local
Dim originalDate As DateTimeOffset
Dim localDate As Date

' Convert time originating in a different time zone
originalDate = New DateTimeOffset(#06/19/2008 7:00AM#, _
                                  New TimeSpan(-5, 0, 0))
localDate = originalDate.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalDate, _
                  localDate, _
                  localDate.Kind.ToString())
' Convert time originating in a different time zone 
' so local time zone's adjustment rules are applied
originalDate = New DateTimeOffset(#11/04/2007 4:00AM#, _
                                  New TimeSpan(-5, 0, 0))
localDate = originalDate.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalDate, _
                  localDate, _
                  localDate.Kind.ToString())
' The example displays the following output to the console,
' when you run it on a machine that is set to Pacific Time (US & Canada):
'       6/18/2008 7:00:00 AM -05:00 converted to 6/18/2008 5:00:00 AM Local
'       11/4/2007 4:00:00 AM -05:00 converted to 11/4/2007 1:00:00 AM Local

범용 변환 방법

다음 예제에서는 DateTimeOffset 값을 DateTime 값으로 변환하는 ConvertFromDateTimeOffset 메서드를 정의합니다. 오프셋에 따라 DateTimeOffset 값이 UTC 시간인지, 현지 시간인지 또는 다른 시간인지를 확인하고 그에 따라 반환된 날짜 및 시간 값의 Kind 속성을 정의합니다.

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime)
{
   if (dateTime.Offset.Equals(TimeSpan.Zero))
      return dateTime.UtcDateTime;
   else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime)))
      return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local);
   else
      return dateTime.DateTime;
}
Function ConvertFromDateTimeOffset(dateTime As DateTimeOffset) As Date
    If dateTime.Offset.Equals(TimeSpan.Zero) Then
        Return dateTime.UtcDateTime
    ElseIf dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))
        Return Date.SpecifyKind(dateTime.DateTime, DateTimeKind.Local)
    Else
        Return dateTime.DateTime
    End If
End Function

다음 예제에서는 ConvertFromDateTimeOffset 메서드를 호출하여 UTC 시간, 현지 시간 및 미국의 시간을 나타내는 DateTimeOffset 값을 변환합니다. 변환합니다.

DateTime timeComponent = new DateTime(2008, 6, 19, 7, 0, 0);
DateTime returnedDate;

// Convert UTC time
DateTimeOffset utcTime = new DateTimeOffset(timeComponent, TimeSpan.Zero);
returnedDate = ConvertFromDateTimeOffset(utcTime);
Console.WriteLine("{0} converted to {1} {2}",
                  utcTime,
                  returnedDate,
                  returnedDate.Kind);

// Convert local time
DateTimeOffset localTime = new DateTimeOffset(timeComponent,
                           TimeZoneInfo.Local.GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(localTime);
Console.WriteLine("{0} converted to {1} {2}",
                  localTime,
                  returnedDate,
                  returnedDate.Kind);

// Convert Central Standard Time
DateTimeOffset cstTime = new DateTimeOffset(timeComponent,
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(cstTime);
Console.WriteLine("{0} converted to {1} {2}",
                  cstTime,
                  returnedDate,
                  returnedDate.Kind);
// The example displays the following output to the console:
//    6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
//    6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
//    6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 7:00:00 AM Unspecified
Dim timeComponent As Date = #06/19/2008 7:00AM#
Dim returnedDate As Date

' Convert UTC time
Dim utcTime As New DateTimeOffset(timeComponent, TimeSpan.Zero)
returnedDate = ConvertFromDateTimeOffset(utcTime)
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())

' Convert local time
Dim localTime As New DateTimeOffset(timeComponent, _
                                    TimeZoneInfo.Local.GetUtcOffset(timeComponent))
returnedDate = ConvertFromDateTimeOffset(localTime)
Console.WriteLine("{0} converted to {1} {2}", _
                  localTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())

' Convert Central Standard Time
Dim cstTime As New DateTimeOffset(timeComponent, _
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent))
returnedDate = ConvertFromDateTimeOffset(cstTime)
Console.WriteLine("{0} converted to {1} {2}", _
                  cstTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())
' The example displays the following output to the console:
'    6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
'    6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
'    6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 7:00:00 AM Unspecified

참고 항목

이 코드는 애플리케이션과 해당 날짜 및 시간 값의 원본에 따라 다음 두 가지 가정이 항상 유효하지 않을 수 있습니다.

  • 오프셋이 TimeSpan.Zero 날짜 및 시간 값이 UTC를 나타낸다고 가정합니다. 실제로 UTC는 특정 표준 시간대의 시간이 아니라 세계 표준 시간대의 시간이 표준화된 시간과 관련된 시간입니다. 표준 시간대에는 Zero 오프셋이 있을 수도 있습니다.

  • 현지 표준 시간대 오프셋과 동일한 오프셋의 날짜와 시간이 현지 표준 시간대를 나타낸다고 가정합니다. 날짜 및 시간 값은 원래 표준 시간대에서 연결되지 않으므로 그렇지 않을 수 있습니다. 날짜와 시간이 동일한 오프셋을 사용하여 다른 표준 시간대에서 시작되었을 수 있습니다.

참고 항목