c# 的 DateTime.Kind 屬性

緣由:
  C# 的 DateTime 是很常用的結構,但在下對它並不十分了解。
頂多存取到它的年、月、日、時、分、秒來使用,因此想多了解一下關於 DateTime 結構的使用方法。
於 DateTime 的其中一個建構函式:
public DateTime(
 int year,
 int month,
 int day,
 int hour,
 int minute,
 int second,
 DateTimeKind kind
)
除了常用的 年、月、日、時、分、秒外,可以另外指定 DateTimneKind  參數。
若未指定 kind 的話,預設值為 System.DateTimeKind.Unspecified.

MSDN 關於 DateTime.Kind  屬性,有一些相關的說明與範例
主函式如下:
static void Main(string[] args)
{
    // 取得目前的本地端時間
    DateTime localNow = DateTime.Now;

    // 取得目前的國際標準時間
    DateTime utcNow = DateTime.UtcNow;
    Display("UtcNow:", utcNow);
    Display("LocalNow:", localNow);

    // 將本地端時間的 Kind 轉為 utc,轉換後兩者的小時一樣
    DateTime myDt = DateTime.SpecifyKind(localNow, DateTimeKind.Utc);
    ConvertAndDisplay("Utc:", myDt);

    // 將本地端時間的 Kind 轉為 local, 轉換後兩者的小時一樣
    myDt = DateTime.SpecifyKind(localNow, DateTimeKind.Local);
    ConvertAndDisplay("Local:", myDt);

    // 將本地端時間的 Kind 轉為 unspecified, 轉換後兩者的小時一樣
    myDt = DateTime.SpecifyKind(localNow, DateTimeKind.Unspecified);
    ConvertAndDisplay("Unspecified:", myDt);

    Console.ReadKey();
}
Display 函式的功能是顯示時間
public static void Display(string title, DateTime inputDt)
{
    Console.WriteLine("{0}{1}, kind={2}", title, inputDt.ToString(DatePatt), inputDt.Kind);
}
ConvertAndDisplay函式負責將輸入的時間轉換為本地時間與世界標準時間,然後依序列印出來, 這裡比較要注意的是若
  1. inputDt.Kind 為 DateTimeKind.Utc 的話,執行 ToLocalTime 會轉換為對應的本地端時間;
  2. inputDt.Kind 為 DateTimeKind.Local 的話,執行 ToLocalTime 並不會轉換;
  3. inputDt.Kind 為 DateTimeKind.Unspecified 的話,執行 ToLocalTime 的過程中,inputDt 會被視為世界標準時間來轉換;
相對的若
  1. inputDt.Kind 為 DateTimeKind.Utc 的話,執行 ToUniversalTime 會轉換為對應的世界標準時間;
  2. inputDt.Kind 為 DateTimeKind.Local 的話,執行 ToUniversalTime 並不會轉換;
  3. inputDt.Kind 為 DateTimeKind.Unspecified 的話,執行 ToUniversalTime 的過程中,inputDt 會被視為本地端時間來轉換
public static void ConvertAndDisplay(string title, DateTime inputDt)
{
    Display(title, inputDt);      
    DateTime localTime = inputDt.ToLocalTime();
    Display("    ToLocalTime:", localTime);

           
    DateTime utcTime = inputDt.ToUniversalTime();
    Display("    ToUtcTime:", utcTime);
 }

執行結果如下:
 

結論: 只指定年、月、日、時、分、秒的 DateTime 建構函式,其 Kind 屬性預設為 Unspecified。若呼叫 ToLocalTime 時,本身會被視為 Utc Time; 相對的,若呼叫 ToUtcTime 時,本身會被視為 Local Time.

沒有留言:

張貼留言

Ubuntu 中編譯 FFMPEG 產生. so

參考連結如下:   https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu cd ~/ffmpeg_sources && \ wget -O ffmpeg-snapshot.tar.bz2 https:/...