using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UVC.Util { public static class DateTimeUtil { //헝가리 서버에서 NQTT 시간이 UTC 시간으로 전송되서 Greenwich Standard Time 로 변경 private static TimeZoneInfo hungaryInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time"); private static TimeZoneInfo koreadInfo = TimeZoneInfo.FindSystemTimeZoneById("Korea Standard Time");//korea /// /// 헝가리 시간 /// public static DateTime HungaryNow { get => TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, hungaryInfo); } public static string HungaryNowString { get => FormatTime(HungaryNow); } public static DateTime UtcNow { get => DateTime.UtcNow; } public static string UtcNowString { get => FormatTime(UtcNow); } private static TimeSpan utcHungaryGap = TimeSpan.Zero; private static TimeSpan utcKoreaGap = TimeSpan.Zero; /// /// hungary - utc 시간 차이 /// public static TimeSpan UtcHungaryGap { get => (utcHungaryGap == TimeSpan.Zero) ? ToHungaryDateTime(DateTime.UtcNow) - DateTime.UtcNow : utcHungaryGap; } /// /// korea - utc 시간 차이 /// public static TimeSpan UtcKoreaGap { get => (utcKoreaGap == TimeSpan.Zero) ? ToKoreaDateTime(DateTime.UtcNow) - DateTime.UtcNow : utcKoreaGap; } /// /// UTC string을 UTC DateTime으로 변환. yyyy-MM-ddTHH:mm:ss.fffZ 포맷이라 제대로 변환 됨 /// /// /// public static DateTime UtcParse(string s) { return DateTime.Parse(s).ToUniversalTime(); } /// /// string을 DateTime으로 변환 /// /// /// /// public static DateTime Parse(string s, string format) { return DateTime.ParseExact(s, format, CultureInfo.InvariantCulture); } /// /// UTC DateTime을 헝가리 DateTime으로 변환 /// /// /// public static DateTime ToHungaryDateTime(DateTime utcDateTime) { return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, hungaryInfo); } /// /// UTC string을 헝가리 DateTime으로 변환 /// /// /// public static DateTime UtcStringToHungaryDateTime(string s) { return ToHungaryDateTime(UtcParse(s)); } /// /// UTC string을 헝가리 Time String으로 변환 /// /// /// public static string UtcStringToHungaryTimeString(string s) { return FormatTime(UtcStringToHungaryDateTime(s)); } /// /// UTC DateTime을 한국 DateTime으로 변환 /// /// /// public static DateTime ToKoreaDateTime(DateTime utcDateTime) { return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, koreadInfo); } /// /// UTC string을 한국 DateTime으로 변환 /// /// /// public static DateTime UtcStringToKoreaDateTime(string s) { return ToKoreaDateTime(UtcParse(s)); } /// /// UTC string을 한국 Time String으로 변환 /// /// /// public static string UtcStringToKoreaTimeString(string s) { return FormatTime(UtcStringToKoreaDateTime(s)); } public static string FormatTime(DateTime dateTime) { return dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); } } }