DateTimeOffset.ToOffset(TimeSpan) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將當前 DateTimeOffset 物件的值轉換為由偏移值指定的日期與時間。
public:
DateTimeOffset ToOffset(TimeSpan offset);
public DateTimeOffset ToOffset(TimeSpan offset);
member this.ToOffset : TimeSpan -> DateTimeOffset
Public Function ToOffset (offset As TimeSpan) As DateTimeOffset
參數
- offset
- TimeSpan
將該值轉換為 DateTimeOffset 的偏移量。
傳回
一個等於原始 DateTimeOffset 物件的物件(也就是說,它們 ToUniversalTime() 的方法回傳相同的時間點),但其 Offset 屬性被設定為 offset。
例外狀況
所得 DateTimeOffset 物件的 DateTime 值早於 DateTimeOffset.MinValue。
-或-
所得物件 DateTimeOffset 的 DateTime 值晚於 DateTimeOffset.MaxValue。
範例
以下範例說明如何使用此 ToOffset 方法將物件 DateTimeOffset 轉換成 DateTimeOffset 偏移量不同的物件。
using System;
public class DateTimeOffsetConversion
{
private static DateTimeOffset sourceTime;
public static void Main()
{
DateTimeOffset targetTime;
sourceTime = new DateTimeOffset(2007, 9, 1, 9, 30, 0,
new TimeSpan(-5, 0, 0));
// Convert to same time (return sourceTime unchanged)
targetTime = sourceTime.ToOffset(new TimeSpan(-5, 0, 0));
ShowDateAndTimeInfo(targetTime);
// Convert to UTC (0 offset)
targetTime = sourceTime.ToOffset(TimeSpan.Zero);
ShowDateAndTimeInfo(targetTime);
// Convert to 8 hours behind UTC
targetTime = sourceTime.ToOffset(new TimeSpan(-8, 0, 0));
ShowDateAndTimeInfo(targetTime);
// Convert to 3 hours ahead of UTC
targetTime = sourceTime.ToOffset(new TimeSpan(3, 0, 0));
ShowDateAndTimeInfo(targetTime);
}
private static void ShowDateAndTimeInfo(DateTimeOffset newTime)
{
Console.WriteLine("{0} converts to {1}", sourceTime, newTime);
Console.WriteLine("{0} and {1} are equal: {2}",
sourceTime, newTime, sourceTime.Equals(newTime));
Console.WriteLine("{0} and {1} are identical: {2}",
sourceTime, newTime,
sourceTime.EqualsExact(newTime));
Console.WriteLine();
}
}
//
// The example displays the following output:
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 9:30:00 AM -05:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are identical: True
//
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 2:30:00 PM +00:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are identical: False
//
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 6:30:00 AM -08:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are identical: False
//
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 5:30:00 PM +03:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are identical: False
open System
let sourceTime = DateTimeOffset(2007, 9, 1, 9, 30, 0, TimeSpan(-5, 0, 0))
let showDateAndTimeInfo newTime =
printfn $"{sourceTime} converts to {newTime}"
printfn $"{sourceTime} and {newTime} are equal: {sourceTime.Equals newTime}"
printfn $"{sourceTime} and {newTime} are identical: {sourceTime.EqualsExact newTime}\n"
[<EntryPoint>]
let main _ =
// Convert to same time (return sourceTime unchanged)
let targetTime = sourceTime.ToOffset(TimeSpan(-5, 0, 0))
showDateAndTimeInfo targetTime
// Convert to UTC (0 offset)
let targetTime = sourceTime.ToOffset TimeSpan.Zero
showDateAndTimeInfo targetTime
// Convert to 8 hours behind UTC
let targetTime = sourceTime.ToOffset(TimeSpan(-8, 0, 0))
showDateAndTimeInfo targetTime
// Convert to 3 hours ahead of UTC
let targetTime = sourceTime.ToOffset(TimeSpan(3, 0, 0))
showDateAndTimeInfo targetTime
0
// The example displays the following output:
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 9:30:00 AM -05:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are identical: True
//
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 2:30:00 PM +00:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are identical: False
//
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 6:30:00 AM -08:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are identical: False
//
// 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 5:30:00 PM +03:00
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are equal: True
// 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are identical: False
Module DateTimeOffsetConversion
Private sourceTime As New DateTimeOffset(#9/1/2007 9:30AM#, _
New TimeSpan(-5, 0, 0))
Public Sub Main()
Dim targetTime As DateTimeOffset
' Convert to same time (return sourceTime unchanged)
targetTime = sourceTime.ToOffset(New TimeSpan(-5, 0, 0))
ShowDateAndTimeInfo(targetTime)
' Convert to UTC (0 offset)
targetTime = sourceTime.ToOffset(TimeSpan.Zero)
ShowDateAndTimeInfo(targetTime)
' Convert to 8 hours behind UTC
targetTime = sourceTime.ToOffset(New TimeSpan(-8, 0, 0))
ShowDateAndTimeInfo(targetTime)
' Convert to 3 hours ahead of UTC
targetTime = sourceTime.ToOffset(New TimeSpan(3, 0, 0))
ShowDateAndTimeInfo(targetTime)
End Sub
Private Sub ShowDateAndTimeInfo(newTime As DateTimeOffset)
Console.WriteLine("{0} converts to {1}", sourceTime, newTime)
Console.WriteLine("{0} and {1} are equal: {2}", _
sourceTime, newTime, sourceTime.Equals(newTime))
Console.WriteLine("{0} and {1} are identical: {2}", _
sourceTime, newTime, _
sourceTime.EqualsExact(newTime))
Console.WriteLine()
End Sub
End Module
'
' The example displays the following output:
' 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 9:30:00 AM -05:00
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are equal: True
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 9:30:00 AM -05:00 are identical: True
'
' 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 2:30:00 PM +00:00
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are equal: True
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 2:30:00 PM +00:00 are identical: False
'
' 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 6:30:00 AM -08:00
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are equal: True
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 6:30:00 AM -08:00 are identical: False
'
' 9/1/2007 9:30:00 AM -05:00 converts to 9/1/2007 5:30:00 PM +03:00
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are equal: True
' 9/1/2007 9:30:00 AM -05:00 and 9/1/2007 5:30:00 PM +03:00 are identical: False
備註
此 ToOffset 方法是呼叫 TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) 方法的替代方案。 當已知時區與協調世界時(UTC)的偏移時,它對於執行從一個時區到另一個時區的簡單換算非常有用。 然而,由於原始 DateTimeOffset 物件與 DateTimeOffset 新物件皆不明確關聯特定時區,該方法在轉換時不套用任何時區調整規則。