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;
}
}
}
时间和日期的工具类
最新推荐文章于 2024-08-09 09:29:39 发布