时间和日期的工具类

3 篇文章 0 订阅

using System;
using UnityEngine;

namespace WV.G2.Game
{
    /// <summary>
    /// 日期和时间的辅助类
    /// </summary>
    public static class DateTimeHelper
    {
        /// <summary>
        /// 时间转时间戳
        /// </summary>
        public static ulong Timestamp(this DateTime dateTime)
        {
            var ts = dateTime - new DateTime(1970, 1, 1, 8, 0, 0, DateTimeKind.Unspecified);
            return (ulong)ts.TotalSeconds;
        }

        /// <summary>
        /// 时间戳转时间
        /// </summary>
        public static DateTime DateTime(this ulong temp, bool millisecond = false)
        {
            if (millisecond)
                return new DateTime(1970, 1, 1, 8, 0, 0, DateTimeKind.Unspecified).AddMilliseconds(temp);
            return new DateTime(1970, 1, 1, 8, 0, 0, DateTimeKind.Unspecified).AddSeconds(temp);
        }

        /// <summary>
        /// 用DayOfWeek来取得下一个日期
        /// </summary>
        /// <param name="date">参考时间</param>
        /// <param name="week">周数</param>
        /// <param name="includeToday">是否包含参考时间,如果date为周三,week也是周三,includeToday为true时返回date,为false时返回下一个周三</param>
        public static DateTime Next(this DateTime date, DayOfWeek week, bool includeToday)
        {
            int day = (int)date.DayOfWeek;
            int target = week == DayOfWeek.Sunday ? 7 : (int)week;
            if (day > target) target += 7;
            int delta = target - day;
            if (delta == 0 && !includeToday) delta = 7;
            return date.AddDays(delta);
        }

        /// <summary>
        /// 用DayOfWeek来取得上一个日期
        /// </summary>
        /// <param name="date">参考时间</param>
        /// <param name="week">周数</param>
        /// <param name="includeToday">是否包含参考时间,如果date为周三,week也是周三,includeToday为true时返回date,为false时返回上一个周三</param>
        public static DateTime Last(this DateTime date, DayOfWeek week, bool includeToday)
        {
            int day = (int)date.DayOfWeek;
            int target = (int)week;
            if (day < target) day += 7;
            int delta = target - day;
            if (delta == 0 && !includeToday) delta = -7;
            return date.AddDays(delta);
        }

        /// <summary>
        /// 整数转DayOfWeek
        /// </summary>
        public static DayOfWeek WeekDay(this int value)
        {
            return (DayOfWeek)(value % 7);
        }

        /// <summary>
        /// 整数秒second格式化为字符串
        /// </summary>
        public static string Format(ulong second)
        {
            var day = second / 86400;
            second = second % 86400;

            var hour = second / 3600;
            second = second % 3600;

            var minute = second / 60;
            second = second % 60;

            if (day > 0)
                return string.Format("{0}天 {1:D2}:{2:D2}:{3:D2}", day, hour, minute, second);
            return string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second);
        }

        /// <summary>
        /// 整数秒时间转换
        /// </summary>
        /// <param name="second"></param>
        /// <returns></returns>
        public static string Format2(ulong second)
        {
            var day = second / 86400;
            second = second % 86400;

            var hour = second / 3600;
            second = second % 3600;

            var minute = second / 60;
            second = second % 60;

            string time = string.Empty;
            if (day > 0)
            {
                time = string.Format("{0}天", day);
            }
            if (hour > 0)
            {
                time += string.Format("{0}小时", hour);
            }
            if (minute > 0)
            {
                time += string.Format("{0}分", minute);
            }
            if (second > 0)
            {
                time += string.Format("{0}秒", second);
            }

            return time;
        }

        /// <summary>
        /// 取两个时间戳的间隔天数
        /// </summary>
        public static int Days(ulong from, ulong to)
        {
            int day = (int) (to.DateTime().Date - @from.DateTime().Date).TotalDays + 1;
            if (day < 0) day = 0;
            return day;
        }

        /// <summary>
        /// 取两个时间戳的间隔小时
        /// </summary>
        public static int Hours(ulong from, ulong to)
        {
            int hour = (int)(to.DateTime().Date - @from.DateTime().Date).TotalDays + 1;
            if (hour < 0) hour = 0;
            return hour;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值