[筆記] C# 預設時間格式及指定時區

指定TimeZone及透過CultureInfo來設定預設時間格式

當Server的位置跟開發端在不同國家地區的時候

時間可以根據開發者需求設定

時間格式也可以設定不用每次都重寫ToString("yyyy/MM/dd")

程式部分
using System;
using System.Globalization;
using System.Linq;
using System.Threading;

namespace ConsoleUtc
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (TimeZoneInfo zoneObj in TimeZoneInfo.GetSystemTimeZones())
            {
                Console.WriteLine(zoneObj.Id);
            }

            var zone = TimeZoneInfo.GetSystemTimeZones()
                           .Where(x => x.Id.Contains("Taipei"))?.First();
            //指定時區的ID
            Console.WriteLine($"---------------指定時區的ID---------------");
            Console.WriteLine(zone.Id);


            //指定的時區
            TimeZoneInfo timezone =
                TimeZoneInfo
                    .FindSystemTimeZoneById(zone.Id); //"Taipei Standard Time"

            //New一個UTC DateTime
            DateTime utcDT = 
                new DateTime(2019, 03, 12, 07, 26, 00, DateTimeKind.Utc);
            //或是
            //DateTime utcDT = DateTime.UtcNow;

            //該時間與協調世界時的偏移
            TimeSpan utcTS = timezone.GetUtcOffset(utcDT);
            Console.WriteLine($"---------------該時間與協調世界時的偏移---------------");
            Console.WriteLine(utcTS);

            // DateTime的偏移
            DateTimeOffset dateOffset =
                new DateTimeOffset(utcDT, TimeSpan.Zero);
            dateOffset = dateOffset.ToOffset(utcTS);
            Console.WriteLine($"---------------DateTime的偏移---------------");
            Console.WriteLine(dateOffset);

            //設定時間預設格式
            CultureInfo myCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            myCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
            myCulture.DateTimeFormat.LongTimePattern = "hh:mm:ss fff";
            Thread.CurrentThread.CurrentCulture = myCulture;
            Console.WriteLine($"---------------用預設格式顯示時間---------------");
            Console.WriteLine(dateAndOffset.DateTime);
            Console.WriteLine(dateAndOffset.DateTime.ToShortDateString());

            Console.ReadKey();
        }
    }
}
輸出結果