307 lines
11 KiB
C#
307 lines
11 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
|
|||
|
|
namespace Services.Tool
|
|||
|
|
{
|
|||
|
|
public class DateTimeDiff
|
|||
|
|
{
|
|||
|
|
public DateTimeDiff()
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
// TODO: 在此处添加构造函数逻辑
|
|||
|
|
//
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 把秒转换成分钟
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static int SecondToMinute(int Second)
|
|||
|
|
{
|
|||
|
|
decimal mm = (decimal)((decimal)Second / (decimal)60);
|
|||
|
|
return Convert.ToInt32(Math.Ceiling(mm));
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算两个时间的时间间隔
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTimeOld">较早的日期和时间</param>
|
|||
|
|
/// <param name="DateTimeNew">较后的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static string DateDiff(DateTime DateTimeOld, DateTime DateTimeNew)
|
|||
|
|
{
|
|||
|
|
string dateDiff = "";
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTimeOld.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTimeNew.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
int day = ts.Days;
|
|||
|
|
int hou = ts.Hours;
|
|||
|
|
int minu = ts.Minutes;
|
|||
|
|
int sec = ts.Seconds;
|
|||
|
|
if (day > 0)
|
|||
|
|
{
|
|||
|
|
if (day > 30)
|
|||
|
|
{
|
|||
|
|
if (day > 364)
|
|||
|
|
{
|
|||
|
|
dateDiff += day / 365 + "年";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
dateDiff += day / 30 + "个月";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
dateDiff += day.ToString() + "天";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (hou > 0)
|
|||
|
|
{
|
|||
|
|
dateDiff += hou.ToString() + "小时";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (minu > 0)
|
|||
|
|
{
|
|||
|
|
dateDiff += minu.ToString() + "分钟";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (sec > 0)
|
|||
|
|
{
|
|||
|
|
dateDiff += sec.ToString() + "秒";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
dateDiff += "0秒";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (DateTimeNew.CompareTo(DateTimeOld) > 0)
|
|||
|
|
{
|
|||
|
|
dateDiff += "前";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
dateDiff += "后";
|
|||
|
|
}
|
|||
|
|
return dateDiff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 返回两个日期之间的时间间隔(y:年份间隔、M:月份间隔、d:天数间隔、h:小时间隔、m:分钟间隔、s:秒钟间隔、ms:微秒间隔)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="Date1">开始日期</param>
|
|||
|
|
/// <param name="Date2">结束日期</param>
|
|||
|
|
/// <param name="Interval">间隔标志</param>
|
|||
|
|
/// <returns>返回间隔标志指定的时间间隔</returns>
|
|||
|
|
public static int DateDiff(System.DateTime Date1, System.DateTime Date2, string Interval)
|
|||
|
|
{
|
|||
|
|
double dblYearLen = 365;//年的长度,365天
|
|||
|
|
double dblMonthLen = (365 / 12);//每个月平均的天数
|
|||
|
|
System.TimeSpan objT;
|
|||
|
|
objT = Date2.Subtract(Date1);
|
|||
|
|
switch (Interval)
|
|||
|
|
{
|
|||
|
|
case "y"://返回日期的年份间隔
|
|||
|
|
return System.Convert.ToInt32(objT.Days / dblYearLen);
|
|||
|
|
case "M"://返回日期的月份间隔
|
|||
|
|
return System.Convert.ToInt32(objT.Days / dblMonthLen);
|
|||
|
|
case "d"://返回日期的天数间隔
|
|||
|
|
return objT.Days;
|
|||
|
|
case "h"://返回日期的小时间隔
|
|||
|
|
return objT.Hours;
|
|||
|
|
case "m"://返回日期的分钟间隔
|
|||
|
|
return objT.Minutes;
|
|||
|
|
case "s"://返回日期的秒钟间隔
|
|||
|
|
return objT.Seconds;
|
|||
|
|
case "ms"://返回时间的微秒间隔
|
|||
|
|
return objT.Milliseconds;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
///判断是否于1分钟之前
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTimeOld">较早的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool DateDiff_minu(DateTime DateTimeOld)
|
|||
|
|
{
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTimeOld.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
int minu = ts.Minutes;
|
|||
|
|
if (minu > 1)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
///判断是否于m分钟之前
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTimeOld">较早的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool DateDiff_minu(DateTime DateTimeOld, int m)
|
|||
|
|
{
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTimeOld.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
int minu = ts.Minutes;
|
|||
|
|
if (minu > m)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public static bool DateDiff_1minu(DateTime DateTimeOld)
|
|||
|
|
{
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTimeOld.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
int minu = ts.Seconds;
|
|||
|
|
if (minu > 10)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 与当前时间比较,重载时间比较函数,只有一个参数
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTimeOld">较早的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static string DateDiff(DateTime DateTimeOld)
|
|||
|
|
{
|
|||
|
|
return DateDiff(DateTimeOld, DateTime.Now);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 日期比较,返回精确的几分几秒
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTime1">较早的日期和时间</param>
|
|||
|
|
/// <param name="DateTime2">较迟的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static string DateDiff_full(DateTime DateTime1, DateTime DateTime2)
|
|||
|
|
{
|
|||
|
|
string dateDiff = null;
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
dateDiff = ts.Days.ToString() + "天" + ts.Hours.ToString() + "时" + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒";
|
|||
|
|
return dateDiff;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 时间比较,返回精确的几秒
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTime1">较早的日期和时间</param>
|
|||
|
|
/// <param name="DateTime2">较迟的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static int DateDiff_Sec(DateTime DateTime1, DateTime DateTime2)
|
|||
|
|
{
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
int dateDiff = ts.Days * 86400 + ts.Hours * 3600 + ts.Minutes * 60 + ts.Seconds;
|
|||
|
|
return dateDiff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 日期比较
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="today">当前日期</param>
|
|||
|
|
/// <param name="writeDate">输入日期</param>
|
|||
|
|
/// <param name="n">比较天数</param>
|
|||
|
|
/// <returns>大于天数返回true,小于返回false</returns>
|
|||
|
|
public static bool CompareDate(string today, string writeDate, int n)
|
|||
|
|
{
|
|||
|
|
DateTime Today = Convert.ToDateTime(today);
|
|||
|
|
DateTime WriteDate = Convert.ToDateTime(writeDate);
|
|||
|
|
WriteDate = WriteDate.AddDays(n);
|
|||
|
|
if (Today >= WriteDate)
|
|||
|
|
return false;
|
|||
|
|
else
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static string FormatProgress(DateTime StartTime, DateTime EndTime)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (DateTime.Now > DateTime.Parse(EndTime.ToShortDateString() + " 23:59:59"))
|
|||
|
|
return "活动结束";
|
|||
|
|
else if (DateTime.Now < DateTime.Parse(StartTime.ToShortDateString() + " 0:0:0"))
|
|||
|
|
return "即将开始";
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int totalDay = DateTimeDiff.DateDiff(StartTime, EndTime, "d");
|
|||
|
|
int inDay = DateTimeDiff.DateDiff(StartTime, DateTime.Now, "d");
|
|||
|
|
if ((float)inDay / (float)totalDay < 0.2f)
|
|||
|
|
return "刚刚开始";
|
|||
|
|
else if ((float)inDay / (float)totalDay >= 0.2f && (float)inDay / (float)totalDay < 0.4)
|
|||
|
|
return "正在进行";
|
|||
|
|
else if ((float)inDay / (float)totalDay >= 0.4 && (float)inDay / (float)totalDay < 0.6)
|
|||
|
|
return "活动过半";
|
|||
|
|
else if ((float)inDay / (float)totalDay > 0.6 && (float)inDay / (float)totalDay <= 0.8)
|
|||
|
|
return "进入尾声";
|
|||
|
|
else
|
|||
|
|
return "即将结束";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 时间戳转为C#格式时间
|
|||
|
|
public static DateTime StampToDateTime(string timeStamp)
|
|||
|
|
{
|
|||
|
|
DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
|
|||
|
|
long lTime = long.Parse(timeStamp + "0000000");
|
|||
|
|
TimeSpan toNow = new TimeSpan(lTime);
|
|||
|
|
|
|||
|
|
return dateTimeStart.Add(toNow);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DateTime时间格式转换为Unix时间戳格式
|
|||
|
|
public static double DateTimeToStamp(System.DateTime time)
|
|||
|
|
{
|
|||
|
|
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
|
|||
|
|
return (time - startTime).TotalMilliseconds;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
///判断是否于多少分钟之前
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="DateTimeOld">较早的日期和时间</param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static bool allDateDiff_minu(DateTime DateTimeOld, int m)
|
|||
|
|
{
|
|||
|
|
TimeSpan ts1 = new TimeSpan(DateTimeOld.Ticks);
|
|||
|
|
TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
|
|||
|
|
TimeSpan ts = ts1.Subtract(ts2).Duration();
|
|||
|
|
int minu = ts.Minutes;
|
|||
|
|
if (minu > m)
|
|||
|
|
{
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|