共用方式為


TimeZoneInfo.GetUtcOffset Method (DateTime)

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Calculates the offset or difference between the time in this time zone and Coordinated Universal Time (UTC) for a particular date and time.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Function GetUtcOffset ( _
    dateTime As DateTime _
) As TimeSpan
public TimeSpan GetUtcOffset(
    DateTime dateTime
)

Parameters

  • dateTime
    Type: System.DateTime
    The date and time to determine the offset for.

Return Value

Type: System.TimeSpan
A TimeSpan object that indicates the time difference between the two time zones.

Remarks

The returned time span includes any differences due to the application of adjustment rules to the current time zone. It differs from the BaseUtcOffset property, which returns the difference between Coordinated Universal Time (UTC) and the time zone's standard time and, therefore, does not take adjustment rules into account.

If the dateTime parameter's Kind property does not correspond to the time zone object, this method performs the necessary conversion before returning a result. For example, this can occur if the Kind property is DateTimeKind.Local but the time zone object is not the local time zone. If dateTime is ambiguous, or if the converted time is ambiguous, this method interprets the ambiguous time as a standard time. If dateTime is invalid, this method returns a TimeSpan object that reflects the difference between UTC and the time zone's standard time.

Version Notes

XNA Framework

 When this method is used in the XNA Framework, it throws a NotSupportedException exception.

Examples

The following example illustrates the use of the GetUtcOffset(DateTime) method with different time zones and with date values that have different Kind property values.

Option Strict On

Module Example
   Public Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      ShowOffset(outputBlock, #6/12/2006 11:00:00 AM#, TimeZoneInfo.Local)
      ShowOffset(outputBlock, #11/4/2007 1:00:00 AM#, TimeZoneInfo.Local)
      ShowOffset(outputBlock, #12/10/2006 3:00:00 PM#, TimeZoneInfo.Local)
      ShowOffset(outputBlock, Date.UtcNow, TimeZoneInfo.Local)

      ShowOffset(outputBlock, #6/12/2006 11:00:00 AM#, TimeZoneInfo.Utc)
      ShowOffset(outputBlock, #11/4/2007 1:00:00 AM#, TimeZoneInfo.Utc)
      ShowOffset(outputBlock, #12/10/2006 3:00:00 PM#, TimeZoneInfo.Utc)
      ShowOffset(outputBlock, Date.Now, TimeZoneInfo.Utc)
   End Sub

   Private Sub ShowOffset(ByVal outputBlock As System.Windows.Controls.TextBlock, _
                          ByVal time As Date, ByVal timeZone As TimeZoneInfo)
      Dim convertedTime As Date = TimeZoneInfo.ConvertTime(time, timeZone)
      Dim offset As TimeSpan = timeZone.GetUtcOffset(time)

      If time = convertedTime Then
         outputBlock.Text &= String.Format("{0} {1} ", time, _
                           IIf(timeZone.IsDaylightSavingTime(time), _
                               timeZone.DaylightName, _
                               timeZone.StandardName)) & vbCrLf
         outputBlock.Text &= String.Format("   It differs from UTC by {0} hours, {1} minutes.", _
                            offset.Hours, _
                            offset.Minutes) & vbCrLf
      Else
         outputBlock.Text &= String.Format("{0} {1} ", time, _
                           IIf(time.Kind = DateTimeKind.Utc, "UTC", _
                           IIf(TimeZoneInfo.Local.IsDaylightSavingTime(time), _ 
                                 TimeZoneInfo.Local.DaylightName, _
                                 TimeZoneInfo.Local.StandardName))) & vbCrLf
         outputBlock.Text &= String.Format("   converts to {0} {1}.", _
                           convertedTime, _
                           IIf(TimeZoneInfo.Local.IsDaylightSavingTime(time), _ 
                                 TimeZoneInfo.Local.DaylightName, _
                                 TimeZoneInfo.Local.StandardName)) & vbCrLf
         outputBlock.Text &= String.Format("   It differs from UTC by {0} hours, {1} minutes.", _
                           offset.Hours, offset.Minutes) & vbCrLf
      End If
      outputBlock.Text &= vbCrLf
   End Sub
End Module
'
' The example produces the following output:
' 
'       6/12/2006 11:00:00 AM Pacific Daylight Time 
'          It differs from UTC by -7 hours, 0 minutes.
'       
'       11/4/2007 1:00:00 AM Pacific Standard Time 
'          It differs from UTC by -8 hours, 0 minutes.
'       
'       12/10/2006 3:00:00 PM Pacific Standard Time 
'          It differs from UTC by -8 hours, 0 minutes.
'       
'       2/2/2007 8:35:46 PM UTC 
'          converts to 2/2/2007 12:35:46 PM Pacific Standard Time.
'          It differs from UTC by -8 hours, 0 minutes.
'       
'       6/12/2006 11:00:00 AM UTC 
'          It differs from UTC by 0 hours, 0 minutes.
'       
'       11/4/2007 1:00:00 AM UTC 
'          It differs from UTC by 0 hours, 0 minutes.
'       
'       12/10/2006 3:00:00 AM UTC 
'          It differs from UTC by 0 hours, 0 minutes.
'       
'       2/2/2007 12:35:46 PM Pacific Standard Time 
'          converts to 2/2/2007 8:35:46 PM UTC.
'          It differs from UTC by 0 hours, 0 minutes.
using System;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      ShowOffset(outputBlock, new DateTime(2006, 6, 12, 11, 0, 0), TimeZoneInfo.Local);
      ShowOffset(outputBlock, new DateTime(2007, 11, 4, 1, 0, 0), TimeZoneInfo.Local);
      ShowOffset(outputBlock, new DateTime(2006, 12, 10, 15, 0, 0), TimeZoneInfo.Local);
      ShowOffset(outputBlock, DateTime.UtcNow, TimeZoneInfo.Local);

      ShowOffset(outputBlock, new DateTime(2006, 6, 12, 11, 0, 0), TimeZoneInfo.Utc);
      ShowOffset(outputBlock, new DateTime(2007, 11, 4, 1, 0, 0), TimeZoneInfo.Utc);
      ShowOffset(outputBlock, new DateTime(2006, 12, 10, 3, 0, 0), TimeZoneInfo.Utc);
      ShowOffset(outputBlock, DateTime.Now, TimeZoneInfo.Utc);
   }

   private static void ShowOffset(System.Windows.Controls.TextBlock outputBlock, DateTime time, TimeZoneInfo timeZone)
   {
      DateTime convertedTime = TimeZoneInfo.ConvertTime(time, timeZone);
      TimeSpan offset = timeZone.GetUtcOffset(time);

      if (time == convertedTime)
      {
         outputBlock.Text += String.Format("{0} {1} ", time,
                           timeZone.IsDaylightSavingTime(time) ? timeZone.DaylightName : timeZone.StandardName) + "\n";
         outputBlock.Text += String.Format("   It differs from UTC by {0} hours, {1} minutes.",
                            offset.Hours,
                            offset.Minutes) + "\n";
      }
      else
      {
         outputBlock.Text += String.Format("{0} {1} ", time,
                           time.Kind == DateTimeKind.Utc ? "UTC" : 
                           TimeZoneInfo.Local.IsDaylightSavingTime(time) ? 
                                 TimeZoneInfo.Local.DaylightName :
                                 TimeZoneInfo.Local.StandardName) + "\n";
         outputBlock.Text += String.Format("   converts to {0} {1}.",
                           convertedTime,
                           timeZone.IsDaylightSavingTime(convertedTime) ?
                                  timeZone.DaylightName :
                                  timeZone.StandardName) + "\n";
         outputBlock.Text += String.Format("   It differs from UTC by {0} hours, {1} minutes.",
                           offset.Hours, offset.Minutes) + "\n";
      }
      outputBlock.Text += "\n";
   }
}
// The example produces the following output:
//
//       6/12/2006 11:00:00 AM Pacific Daylight Time 
//          It differs from UTC by -7 hours, 0 minutes.
//       
//       11/4/2007 1:00:00 AM Pacific Standard Time 
//          It differs from UTC by -8 hours, 0 minutes.
//       
//       12/10/2006 3:00:00 PM Pacific Standard Time 
//          It differs from UTC by -8 hours, 0 minutes.
//       
//       5/3/2008 11:04:36 PM UTC
//          converts to 5/3/2008 4:04:36 PM UTC. 
//          It differs from UTC by -7 hours, 0 minutes.
//       
//       6/12/2006 11:00:00 AM Pacific Daylight Time
//          converts to 6/12/2006 6:00:00 PM UTC. 
//          It differs from UTC by 0 hours, 0 minutes.
//       
//       11/4/2007 1:00:00 AM Pacific Standard Time
//          converts to 11/4/2007 9:00:00 AM UTC. 
//          It differs from UTC by 0 hours, 0 minutes.
//       
//       12/10/2006 3:00:00 AM Pacific Standard Time
//          converts to 12/10/2006 11:00:00 AM UTC. 
//          It differs from UTC by 0 hours, 0 minutes.
//       
//       5/3/2008 4:04:36 PM Pacific Davlight Time 
//          converts to 5/3/2008 11:04:36 PM UTC.
//          It differs from UTC by 0 hours, 0 minutes.
//       

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.