using System; #if FANTASY_UNITY using UnityEngine; #endif namespace Fantasy.Helper { /// /// 提供与时间相关的帮助方法。 /// public static partial class TimeHelper { /// /// 一小时的毫秒值。 /// public const long Hour = 3600000; /// /// 一分钟的毫秒值。 /// public const long Minute = 60000; /// /// 一天的毫秒值。 /// public const long OneDay = 86400000; // 1970年1月1日的Ticks private const long Epoch = 621355968000000000L; /// /// 获取当前时间的毫秒数,从1970年1月1日开始计算。 /// public static long Now => (DateTime.UtcNow.Ticks - Epoch) / 10000; #if FANTASY_UNITY || FANTASY_CONSOLE /// /// 与服务器时间的偏差。 /// public static long TimeDiff; /// /// 获取当前服务器时间的毫秒数,加上与服务器时间的偏差。 /// public static long ServerNow => Now + TimeDiff; #if FANTASY_UNITY /// /// 获取当前Unity运行的总时间的毫秒数。 /// public static long UnityNow => (long) (Time.time * 1000); #endif #endif /// /// 根据时间获取时间戳 /// public static long Transition(DateTime dateTime) { return (dateTime.ToUniversalTime().Ticks - Epoch) / 10000; } /// /// 根据时间获取 时间戳 /// public static long TransitionToSeconds(DateTime dateTime) { return (dateTime.ToUniversalTime().Ticks - Epoch) / 10000000; } /// /// 将毫秒数转换为日期时间。 /// /// 要转换的毫秒数。 /// 转换后的日期时间。 public static DateTime Transition(this long timeStamp) { return new DateTime(Epoch + timeStamp * 10000, DateTimeKind.Utc).ToUniversalTime(); } /// /// 将毫秒数转换为本地时间的日期时间。 /// /// 要转换的毫秒数。 /// 转换后的本地时间的日期时间。 public static DateTime TransitionLocal(this long timeStamp) { return new DateTime(Epoch + timeStamp * 10000, DateTimeKind.Utc).ToLocalTime(); } } }