【经验】Unity日期工具类整理

using System;

public class TimeUtils
{

    /// <summary>
    /// 时间戳起点
    /// </summary>
    static DateTime  originTime = new DateTime(1970, 1, 1);

    /// <summary>
    /// 获取当前本地时间戳
    /// </summary>
    /// <returns></returns>      
    public static long GetCurrentTimeUnix()
    {
        TimeSpan cha = DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long t = (long) cha.TotalMilliseconds;
        return t;
    }

    public static long GetCurrentTimeSeconds()
    {
        TimeSpan cha = DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long t = (long) cha.TotalSeconds;
        return t;
    }
    
    /// <summary>
    /// 获取指定时间戳
    /// </summary>
    /// <param name="dateTime"></param>
    /// <returns></returns>
    public static long GetTimestamp(DateTime dateTime)
    {
        TimeSpan cha = dateTime - TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long t = (long) cha.TotalSeconds;
        return t;
    }

    /// <summary>
    /// 获取当前UTC0时间戳
    /// 以秒为单位(临时的,以后使用服务器时间)
    /// </summary>
    /// <returns>返回秒数</returns>
    public static int GetUTC0TimeStamp()
    {
        return (int)Math.Floor((DateTime.UtcNow - originTime).TotalSeconds);
    }

    /// <summary>
    /// 当天0点的时时间戳
    /// </summary>
    /// <returns></returns>
    public static long GetTodaySeconds()
    {
        TimeSpan cha = DateTime.Today - TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long t = (long) cha.TotalSeconds;
        return t;
    }
    
    /// <summary>
    /// 获取当天前后offset天的0点时间戳(单位秒)
    /// </summary>
    public static long GetTodaySeconds(int offset)
    {
        TimeSpan cha = DateTime.Today.AddDays(offset) - TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long t = (long) cha.TotalSeconds;
        return t;
    }
    
    /// <summary>
    /// 获取本周周一0点的时间戳
    /// </summary>
    /// <returns></returns>
    public static long GetMonDaySeconds()
    {
        TimeSpan cha = GetWeekFirstDay() - TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long t = (long) cha.TotalSeconds;
        return t;
    }
    
    /// <summary>
    /// 获取本周的第一天    周一为第一天
    /// </summary>
    /// <returns></returns>
    public static DateTime GetWeekFirstDay()
    {
        //获取当前日期的星期    周日是0   周一是1
        int weeknow = Convert.ToInt32(DateTime.Today.DayOfWeek);
        weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1));//如果今天是周日  获取往前推六天的日期
        int daydiff = (-1) * weeknow;//得到往前推的天数
        DateTime FirstDay = DateTime.Today.AddDays(daydiff);//获取往前推的日期
        return FirstDay;
    }

    /// <summary>
    /// 获取本周的最后一天 周日为最后一天
    /// </summary>
    /// <returns></returns>
    public static DateTime GetWeekLastDay()
    {
        int lastWeekDay = Convert.ToInt32(DateTime.Today.DayOfWeek);//获取当前日期的星期
        lastWeekDay = lastWeekDay == 0 ? (7 - lastWeekDay) : lastWeekDay;//往后推算日期
        int lastWeekDiff = (7 - lastWeekDay);//得到往后推算日期的天数
        DateTime LastDay = DateTime.Today.AddDays(lastWeekDiff);
        return LastDay;
    }

    /// <summary>
    /// 获取下周一
    /// </summary>
    /// <returns></returns>
    public static DateTime GetNextWeekMonDay()
    {
        int lastWeekDay = Convert.ToInt32(DateTime.Today.DayOfWeek);//获取当前日期的星期
        lastWeekDay = lastWeekDay == 0 ? (7 - lastWeekDay) : lastWeekDay;//往后推算日期
        int lastWeekDiff = (7 - lastWeekDay) + 1;//得到往后推算日期的天数
        DateTime LastDay = DateTime.Today.AddDays(lastWeekDiff);
        return LastDay;
    }

    /// <summary>
    /// 时间戳转换为本地时间对象
    /// </summary>
    /// <returns></returns>      
    public static DateTime GetUnixDateTime(long unix)
    {
        //long unix = 1500863191;
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        DateTime newTime = dtStart.AddMilliseconds(unix);
        return newTime;
    }

    public static string SecondFormatHhMmSs2(long second)
    {
        string str = "";
        long hour = second / 3600;
        long min = second % 3600 / 60;
        long sec = second % 60;
        if(hour < 10)
        {
            str += "0" + hour.ToString();
        }
        else
        {
            str += hour.ToString();
        }

        str += "h ";
        if(min < 10)
        {
            str += "0" + min.ToString();
        }
        else
        {
            str += min.ToString();
        }

        str += "m ";
        if(sec < 10)
        {
            str += "0" + sec.ToString();
        }
        else
        {
            str += sec.ToString();
        }

        str += "s";
        return str;
    }

    public static string SecondFormatDdHhMm(long second)
    {
        string str = "";
        long day = second / 86400;
        long hour = second % 86400 / 3600;
        long min = second % 86400 % 3600 / 60;
        if(day < 10)
        {
            str += "0" + day.ToString();
        }
        else
        {
            str += day.ToString();
        }

        str += ":";
        if(hour < 10)
        {
            str += "0" + hour.ToString();
        }
        else
        {
            str += hour.ToString();
        }

        str += ":";
        if(min < 10)
        {
            str += "0" + min.ToString();
        }
        else
        {
            str += min.ToString();
        }

        return str;
    }

    public static string SecondFormatHhMmSs(long second)
    {
        string str = "";
        long hour = second / 3600;
        long min = second % 3600 / 60;
        long sec = second % 60;
        if(hour < 10)
        {
            str += "0" + hour.ToString();
        }
        else
        {
            str += hour.ToString();
        }

        str += ":";
        if(min < 10)
        {
            str += "0" + min.ToString();
        }
        else
        {
            str += min.ToString();
        }

        str += ":";
        if(sec < 10)
        {
            str += "0" + sec.ToString();
        }
        else
        {
            str += sec.ToString();
        }

        return str;
    }

    public static string SecondFormatMmSs(long second)
    {
        string str = "";
        long min = second / 60;
        long sec = second % 60;
        if(min < 10)
        {
            str += "0" + min.ToString();
        }
        else
        {
            str += min.ToString();
        }

        str += ":";
        if(sec < 10)
        {
            str += "0" + sec.ToString();
        }
        else
        {
            str += sec.ToString();
        }

        return str;
    }

    public static string SecondFormatDdHhMmSs(long second)
    {
        string str = "";
        long day = second / 86400;
        long hour = second % 86400 / 3600;
        long min = second % 86400 % 3600 / 60;
        long sec = second % 60;
        if(day < 10)
        {
            str += "0" + day.ToString();
        }
        else
        {
            str += day.ToString();
        }

        str += "d ";
        if(hour < 10)
        {
            str += "0" + hour.ToString();
        }
        else
        {
            str += hour.ToString();
        }

        str += "h ";
        if(min < 10)
        {
            str += "0" + min.ToString();
        }
        else
        {
            str += min.ToString();
        }

        str += "m ";
        if(sec < 10)
        {
            str += "0" + sec.ToString();
        }
        else
        {
            str += sec.ToString();
        }

        str += "s";
        return str;
    }

    public static long GetDayRemainingTime()
    {
        //获取当前时间
        DateTime DateTime1 = DateTime.Now;
        //第二天的0点00分00秒
        DateTime DateTime2 = DateTime.Now.AddDays(1).Date;
        //把2个时间转成TimeSpan,方便计算
        TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
        TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
        //时间比较,得出差值
        TimeSpan ts = ts1.Subtract(ts2).Duration();
        //结果
        return (long) ts.TotalSeconds;
    }

    /// <summary>
    /// 获取当前DateTime时间
    /// </summary>
    /// <returns></returns>
    public static DateTime GetNowDateTime()
    {
        return DateTime.Now;
    }

    /// <summary>
    /// 获取当前Unix时间(秒)
    /// </summary>
    /// <returns></returns>
    public static int GetNowUnixTime()
    {
        return DateTime2Unix(GetNowDateTime());
    }

    /// <summary>
    /// 检测DateTime是否是当日
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static bool isToday(DateTime dt)
    {
        if(GetDateFirst(dt).Equals(GetNowDateTime()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// 检测Unix时间是否是当日(秒)
    /// </summary>
    /// <param name="timeStamp"></param>
    /// <returns></returns>
    public static bool isToday(string timeStamp)
    {
        DateTime dt = Unix2DateTime(timeStamp);
        if(GetDateFirst(dt).Equals(GetDateFirst(GetNowDateTime())))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>  
    /// 时间戳转为C#格式时间  
    /// </summary>  
    /// <param name="timeStamp">Unix时间戳格式(秒)</param>  
    /// <returns>C#格式时间(DateTime)</returns>  
    public static DateTime Unix2DateTime(string timeStamp)
    {
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        long lTime = long.Parse(timeStamp + "0000000");
        TimeSpan toNow = new TimeSpan(lTime);
        return dtStart.Add(toNow);
    }

    /// <summary>  
    /// DateTime时间格式转换为Unix时间戳格式(秒)
    /// </summary>  
    /// <param name="time"> DateTime时间格式</param>  
    /// <returns>Unix时间戳格式(秒)</returns>  
    public static int DateTime2Unix(System.DateTime time)
    {
        System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(originTime);
        return (int) (time - startTime).TotalSeconds;
    }

    /// <summary>
    /// 获取当前日期的星期几(星期天为7)
    /// </summary>
    /// <returns></returns>
    public static int GetCurrentDayOfWeek()
    {
        int dayOfWeek = Convert.ToInt32(DateTime.Now.DayOfWeek) < 1 ? 7 : Convert.ToInt32(DateTime.Now.DayOfWeek);
        return dayOfWeek;
    }

    /// <summary>
    /// 获取本周一
    /// </summary>
    /// <returns></returns>
    public static DateTime GetCurrentMonday()
    {
        DateTime monday = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).AddDays(1 - GetCurrentDayOfWeek());
        return monday;
    }

    /// <summary>
    /// 获取本周日(星期天)
    /// </summary>
    /// <returns></returns>
    public static DateTime GetCurrentSunday()
    {
        DateTime sunday = GetCurrentMonday().AddDays(6);
        return sunday;
    }


    /// <summary>
    /// 获取DateTime的日期部分:2005-06-07
    /// </summary>
    /// <param name="T"></param>
    /// <returns></returns>
    public static string GetDateFirst(DateTime T, int a = 0)
    {
        if(a == 1)
        {
            return T.Year + "." + TwoChar(T.Month) + "." + TwoChar(T.Day);
        }

        return T.Year + "-" + TwoChar(T.Month) + "-" + TwoChar(T.Day);
    }


    /// <summary>
    /// 获取DateTime的时间部分:12:23:34
    /// </summary>
    /// <param name="T"></param>
    /// <returns></returns>
    public static string GetDateLast(DateTime T)
    {
        return TwoChar(T.Hour) + ":" + TwoChar(T.Minute) + ":" + TwoChar(T.Second);
    }

    /// <summary>
    /// 获取两个日期之间的差值
    /// </summary>
    /// <param name="howtocompare">比较的方式可为:year month day hour minute second</param>
    /// <param name="startDate">开始日期</param>
    /// <param name="endDate">结束日期</param>
    /// <returns>时间差</returns>
    public static double GetDateDiff(string howtocompare, DateTime startDate, DateTime endDate)
    {
        double diff = 0;
        try
        {
            TimeSpan TS = new TimeSpan(endDate.Ticks - startDate.Ticks);

            switch (howtocompare.ToLower())
            {
                case "year":
                    diff = Convert.ToDouble(TS.TotalDays / 365);
                    break;
                case "month":
                    diff = Convert.ToDouble((TS.TotalDays / 365) * 12);
                    break;
                case "day":
                    diff = Convert.ToDouble(TS.TotalDays);
                    break;
                case "hour":
                    diff = Convert.ToDouble(TS.TotalHours);
                    break;
                case "minute":
                    diff = Convert.ToDouble(TS.TotalMinutes);
                    break;
                case "second":
                    diff = Convert.ToDouble(TS.TotalSeconds);
                    break;
            }
        }
        catch (Exception)
        {
            diff = 0;
        }

        return diff;
    }

    /// <summary>
    /// 比较时间
    /// </summary>
    /// <param name="date1">小的时间</param>
    /// <param name="date2">大的时间</param>
    /// <returns></returns>
    public static TimeSpan ComparisonTime(DateTime date1, DateTime date2)
    {
        TimeSpan inter = new TimeSpan();
        try
        {
            inter = date1 - date2;
        }
        catch (Exception) { }

        return inter;
    }

    /// <summary>
    /// 将n转化为2位符号数, 0-99 转化为00-99
    /// </summary>
    /// <param name="n"></param>
    /// <returns></returns>
    private static string TwoChar(int n)
    {
        return (n < 10 ? "0" : "") + n;
    }

    public static long ModifyTime(DateTime date, int timeZone = 0, bool getSecond = true)
    {
        DateTime startTime = new DateTime(1970, 1, 1, timeZone, 0, 0);
        TimeSpan ts = date - startTime;
        return getSecond ? (long) ts.TotalSeconds : (long) ts.TotalMilliseconds;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_zsy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值