閱讀英文

共用方式為


作法:解決模稜兩可的時間

不明確的時間是指對應到多個國際標準時間 (UTC) 的時間。 發生時機是往回調整時鐘時間,例如從時區的日光節約時間轉換到其標準時間期間。 處理不明確的時間時,您可以執行下列其中一項:

  • 假設如何將時間對應至 UTC。 例如,您可以假設不明確的時間一律是以時區的標準時間表示。

  • 如果不明確的時間是使用者所輸入的資料項目,可交由使用者解決此不明確狀況。

本文示範在假設不明確時間代表該時區標準時間的情況下,如何解決不明確時間的問題。

將不明確的時間對應至時區標準時間

  1. 呼叫 IsAmbiguousTime 方法來判斷時間是否不明確。

  2. 如果是不明確時間,會減去時區 BaseUtcOffset 屬性所傳回 TimeSpan 物件的時間。

  3. 呼叫 static (Visual Basic .NET 中的 Shared) SpecifyKind 方法,以將 UTC 日期和時間值的 Kind 屬性設定為 DateTimeKind.Utc

範例

下列範例說明在假設不明確時間代表當地時區標準時間的情況下,如何將不明確時間轉換為 UTC。

C#
private static DateTime ResolveAmbiguousTime(DateTime ambiguousTime)
{
    // Time is not ambiguous
    if (!TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime))
    {
        return ambiguousTime;
    }
    // Time is ambiguous
    else
    {
        DateTime utcTime = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset,
                                                DateTimeKind.Utc);
        Console.WriteLine("{0} local time corresponds to {1} {2}.",
                          ambiguousTime, utcTime, utcTime.Kind.ToString());
        return utcTime;
    }
}

此範例包含名為 ResolveAmbiguousTime 的方法,可判斷傳遞給方法的 DateTime 值是否不明確。 如果是不明確的值,則方法會傳回 DateTime 值,代表對應的 UTC 時間。 此方法處理這項轉換的方式是將當地時間減去當地時區 BaseUtcOffset 屬性值。

一般而言,不明確時間的處理方式是呼叫 GetAmbiguousTimeOffsets 方法來擷取 TimeSpan 物件陣列,其中包含不明確時間可能的 UTC 時差。 不過,此範例會進行任意假設,即不明確的時間應該一律對應至時區標準時間。 BaseUtcOffset 屬性會傳回 UTC 與時區標準時間之間的時差。

在此範例中,當地時區的所有參考都是透過 TimeZoneInfo.Local 屬性進行;當地時區絕不會指派給物件變數。 這是建議作法,原因是對 TimeZoneInfo.ClearCachedData 方法的呼叫會讓任何指派給當地時區的物件失效。

另請參閱