Files
XRServer/XRServer/DateTimeUtil.cs
2025-06-02 11:41:39 +09:00

118 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace XRServer
{
public 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
/// <summary>
/// 헝가리 시간
/// </summary>
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;
/// <summary>
/// hungary - utc 시간 차이
/// </summary>
public static TimeSpan UtcHungaryGap { get => (utcHungaryGap == TimeSpan.Zero) ? ToHungaryDateTime(DateTime.UtcNow) - DateTime.UtcNow : utcHungaryGap; }
/// <summary>
/// UTC string을 UTC DateTime으로 변환. yyyy-MM-ddTHH:mm:ss.fffZ 포맷이라 제대로 변환 됨
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static DateTime UtcParse(string s) { return DateTime.Parse(s).ToUniversalTime(); }
/// <summary>
/// string을 DateTime으로 변환
/// </summary>
/// <param name="s"></param>
/// <param name="format"></param>
/// <returns></returns>
public static DateTime Parse(string s, string format) { return DateTime.ParseExact(s, format, CultureInfo.InvariantCulture); }
/// <summary>
/// UTC DateTime을 헝가리 DateTime으로 변환
/// </summary>
/// <param name="utcDateTime"></param>
/// <returns></returns>
public static DateTime ToHungaryDateTime(DateTime utcDateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, hungaryInfo);
}
/// <summary>
/// UTC string을 헝가리 DateTime으로 변환
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static DateTime UtcStringToHungaryDateTime(string s)
{
return ToHungaryDateTime(UtcParse(s));
}
/// <summary>
/// UTC string을 헝가리 Time String으로 변환
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string UtcStringToHungaryTimeString(string s)
{
return FormatTime(UtcStringToHungaryDateTime(s));
}
/// <summary>
/// UTC DateTime을 한국 DateTime으로 변환
/// </summary>
/// <param name="utcDateTime"></param>
/// <returns></returns>
public static DateTime ToKoreaDateTime(DateTime utcDateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, koreadInfo);
}
/// <summary>
/// UTC string을 한국 DateTime으로 변환
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static DateTime UtcStringToKoreaDateTime(string s)
{
return ToKoreaDateTime(UtcParse(s));
}
/// <summary>
/// UTC string을 한국 Time String으로 변환
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
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");
}
}
}