DateTime ไม่ทราบการชดเชยเขตเวลา ไม่มีวิธีการในตัวในการคืนค่าออฟเซ็ตหรือชื่อเขตเวลา (เช่น EAT, CEST, EST เป็นต้น)
เช่นเดียวกับที่ผู้อื่นแนะนำคุณสามารถแปลงวันที่ของคุณเป็น UTC:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
จากนั้นคำนวณเฉพาะความแตกต่าง:
TimeSpan difference = localtime - utctime;
นอกจากนี้คุณสามารถแปลงครั้งหนึ่งเป็นอีกครั้งได้โดยใช้ DateTimeOffset:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
แต่นี่เป็นการบีบอัดแบบสูญเสีย - การชดเชยเพียงอย่างเดียวไม่สามารถบอกคุณได้ว่าเป็นเขตเวลาใดเนื่องจากสองประเทศที่แตกต่างกันอาจอยู่ในเขตเวลาที่ต่างกันและมีเวลาเดียวกันในบางส่วนของปีเท่านั้น (เช่นแอฟริกาใต้และยุโรป) นอกจากนี้โปรดทราบว่าอาจมีการใช้เวลาออมแสงในฤดูร้อนในวันที่ต่างกัน (EST เทียบกับ CET - ต่างกัน 3 สัปดาห์)
คุณสามารถรับชื่อโซนเวลาของระบบท้องถิ่นของคุณโดยใช้คลาส TimeZoneInfo:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
ฉันเห็นด้วยกับ Gerrie Schenck โปรดอ่านบทความที่เขาแนะนำ