using System; namespace Cute; public class TimeUtil { public struct TimeLeftParam { public int day; public int hour; public int minute; public int second; public int millisecond; public int count; public bool isEnd; public bool isCharge; public TimeLeftParam(long unixTime, long consumingTime) { if (unixTime <= 0) { isEnd = true; count = 0; day = 0; hour = 0; minute = 0; second = 0; millisecond = 0; isCharge = true; return; } isEnd = false; if (consumingTime == 0L) { count = 0; isCharge = false; } else { count = (int)(unixTime / consumingTime) + 1; unixTime = unixTime - (count - 1) * consumingTime + 1; if (unixTime == consumingTime) { isCharge = true; } else { isCharge = false; } } day = (int)unixTime / 86400; hour = (int)unixTime / 3600 % 24; minute = (int)unixTime / 60 % 60; second = (int)unixTime % 60; millisecond = (int)unixTime % 1000; } public override string ToString() { return $"回数{count:D2}残り{day:D2}日 {hour:D2}:{minute:D2}:{second:D2}"; } } private static readonly DateTime UNIX_EPOCH = new DateTime(1970, 1, 1, 0, 0, 0, 0); public const int DAY_HOUR = 24; public const int DAY_SECOND = 86400; public const int HOUR_SECOND = 3600; public const int MINUTE_SECOND = 60; public const int MILLI_SECOND = 1000; public static DateTime GetNowTime(long serverTime, long connectClientTime) { return UNIX_EPOCH.AddSeconds((float)serverTime + TimeNativePlugin.GetDeviceOperatingTime() - (float)connectClientTime).ToLocalTime(); } public static DateTime GetNowTime_UTC(long serverTime, long connectClientTime) { return UNIX_EPOCH.AddSeconds((float)serverTime + TimeNativePlugin.GetDeviceOperatingTime() - (float)connectClientTime); } public static DateTime GetAbsoluteTime() { return UNIX_EPOCH.AddSeconds(TimeNativePlugin.GetDeviceOperatingTime()); } public static long ToUnixTime(string str) { if (str == null) { return 0L; } return ToUnixTime(DateTime.Parse(str)); } public static long ToUnixTime(DateTime dateTime) { return (long)ToUnixTimeDouble(dateTime); } public static double ToUnixTimeDouble(DateTime dateTime) { dateTime = dateTime.ToUniversalTime(); return (dateTime - UNIX_EPOCH).TotalSeconds; } public static DateTime FromUnixTime(long unixTime) { return UNIX_EPOCH.AddSeconds(Convert.ToDouble(unixTime)).ToLocalTime(); } public static DateTime MicroTimeToFromUnixTime(long unixTime) { return FromUnixTime(unixTime / 1000); } public static TimeLeftParam GetTimeLeft(long nowTime, long endTime, long consumingTime = 0L) { return new TimeLeftParam(endTime - nowTime, consumingTime); } public static long GetElapsedTime(DateTime baseDateTime, DateTime dateTime) { return ToUnixTime(dateTime) - ToUnixTime(baseDateTime); } public static TimeSpan GetElapsedTimeByTimeSpan(DateTime baseDateTime, DateTime dateTime) { return baseDateTime - dateTime; } public static bool IsTermTime(string startDate, string endDate, long checkTime = 0L) { return true; } }