using System;
namespace CallCenter.Utility
{
///
///DateTimeConvert
///
public class DateTimeConvert
{
private static readonly DateTime StartedDateTime = new DateTime(1970, 1, 1,0,0,0,DateTimeKind.Utc);
///
/// 根据阿拉伯数字返回月份的名称(可更改为某种语言)
///
public static string[] Monthes
{
get
{
return new[] { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
}
}
///
/// 判断是不是当月的最后一天,是返回true,否返回flase
///
///
///
public bool IsLastMonthDay(DateTime Dt)
{
bool Flag = false;
DateTime MonthClearTime = Dt.AddDays(1 - Dt.Day).AddMonths(1).AddDays(-1);
if (DateDiff("D", Dt, MonthClearTime) == 0)
{
Flag = true;
}
return Flag;
}
#region 日期时间方法
public static string DateDiff(DateTime DateTime1, DateTime DateTime2)
{
string dateDiff = null;
TimeSpan ts = DateTime1.Subtract(DateTime2).Duration();
string days = "";string hours = "";
if (ts.Days.ToString() != "0")
days = ts.Days.ToString() + "天";
if(ts.Hours.ToString() !="0")
hours = ts.Hours.ToString() + "时";
dateDiff = days + hours + ts.Minutes.ToString() + "分"; // + ts.Seconds.ToString() + "秒";
return dateDiff;
}
///
/// 日期时间相减方法 M 月,D 天,H小时,T分,S秒
///
///
///
///
///
public static int DateDiff(string dtype, DateTime D1, DateTime D2)
{
int d = 0;
int h = 0;
int t = 0;
switch (dtype.ToUpper())
{
case "M":
d = D2.Year - D1.Year;
h = D2.Month - D1.Month;
if (d > 0)
{
return d * 12 + h + 1;
}
if (d == 0)
{
if (h > 0)
{
return h + 1;
}
if (h == 0)
{
return 1;
}
return d * 12 + h - 1;
}
return d * 12 + h - 1;
case "D":
TimeSpan Num = Convert.ToDateTime(D2.ToShortDateString()) - Convert.ToDateTime(D1.ToShortDateString());
return Num.Days;
case "H":
d = DateDiff("D", D1, D2);
h = D2.Hour - D1.Hour;
return h + (d * 24);
case "T":
d = Convert.ToInt32(D2.Subtract(D1).Days);
h = Convert.ToInt32(D2.Subtract(D1).Hours);
t = Convert.ToInt32(D2.Subtract(D1).Minutes);
return ((h + (d * 24)) * 60) + t;
case "S":
d = Convert.ToInt32(D2.Subtract(D1).Days);
h = Convert.ToInt32(D2.Subtract(D1).Hours);
t = Convert.ToInt32(D2.Subtract(D1).Minutes);
return ((((h + (d * 24)) * 60) + t) * 60) + Convert.ToInt32(D2.Subtract(D1).Seconds);
default:
return -1;
}
}
public static long DateDiff(DateInterval Interval, DateTime StartDate, DateTime EndDate)
{
long lngDateDiffValue = 0;
var TS = new TimeSpan(EndDate.Ticks - StartDate.Ticks);
switch (Interval)
{
case DateInterval.Second:
lngDateDiffValue = (long)TS.TotalSeconds;
break;
case DateInterval.Minute:
lngDateDiffValue = (long)TS.TotalMinutes;
break;
case DateInterval.Hour:
lngDateDiffValue = (long)TS.TotalHours;
break;
case DateInterval.Day:
lngDateDiffValue = TS.Days;
break;
case DateInterval.Week:
lngDateDiffValue = TS.Days / 7;
break;
case DateInterval.Month:
lngDateDiffValue = TS.Days / 30;
break;
case DateInterval.Quarter:
lngDateDiffValue = (TS.Days / 30) / 3;
break;
case DateInterval.Year:
lngDateDiffValue = TS.Days / 365;
break;
}
return (lngDateDiffValue);
}
#endregion
///
/// 将时间戳转换为DateTime类型
///
///
///
///
public static DateTime FromTimetag(long timetag,bool toLocalTime = true)
{
var time = new DateTime(StartedDateTime.Ticks + timetag*10000);
return toLocalTime ? time.ToLocalTime() : time;
}
///
/// 将Datetime类型转换为时间戳
///
///
///
public static long ToTimetag(DateTime dateTime)
{
return (dateTime.ToUniversalTime().Ticks - StartedDateTime.Ticks)/10000;
}
///
///由秒数得到日期几天几小时。。。
///秒数
///0:转换后带秒,1:转换后不带秒
///几天几小时几分几秒
public static string parseTimeSeconds(int t, int type)
{
string r = "";
int day, hour, minute, second;
if (t >= 86400) //天,
{
day = Convert.ToInt32(t / 86400);
hour = Convert.ToInt32((t % 86400) / 3600);
minute = Convert.ToInt32((t % 86400 % 3600) / 60);
second = Convert.ToInt32(t % 86400 % 3600 % 60);
if (type == 0)
r = day + ("天") + hour + ("小时") + minute + ("分") + second + ("秒");
else
r = day + ("天") + hour + ("小时") + minute + ("分");
}
else if (t >= 3600)//时,
{
hour = Convert.ToInt32(t / 3600);
minute = Convert.ToInt32((t % 3600) / 60);
second = Convert.ToInt32(t % 3600 % 60);
if (type == 0)
r = hour + ("小时") + minute + ("分") + second + ("秒");
else
r = hour + ("小时") + minute + ("分");
}
else if (t >= 60)//分
{
minute = Convert.ToInt32(t / 60);
second = Convert.ToInt32(t % 60);
r = minute + ("分") + second + ("秒");
}
else
{
second = Convert.ToInt32(t);
r = second + ("秒");
}
return r;
}
///
/// 当前日期时间,转换为秒
///
/// 秒数
public static string xDateSeconds()
{
long xdateseconds = 0;
DateTime xdatenow = DateTime.UtcNow; //当前UTC时间
long xminute = 60; //一分种60秒
long xhour = 3600;
long xday = 86400;
long byear = 1970;//从1970-1-1 0:00:00开始到现在所过的秒
long[] xmonth = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
long[] xyear = { 365, 366 };
long num = 0;
xdateseconds += xdatenow.Second; //算秒
xdateseconds += xdatenow.Minute * xminute; //算分
xdateseconds += xdatenow.Hour * xhour; //算时
xdateseconds += (xdatenow.Day - 1) * xday; //算天
//算月(月换成天算)
if (DateTime.IsLeapYear(xdatenow.Year))
{
xdateseconds += (xmonth[xdatenow.Month - 1] + 1) * xday;
}
else
{
xdateseconds += (xmonth[xdatenow.Month - 1]) * xday;
}
//算年(年换成天算)
long lyear = xdatenow.Year - byear;
for (int i = 0; i < lyear; i++)
{
if (DateTime.IsLeapYear((int)byear + i))
{
num++;
}
}
xdateseconds += ((lyear - num) * xyear[0] + num * xyear[1]) * xday;
return xdateseconds.ToString();
}
///
/// 秒数转日期
///
/// 秒数
/// 日期
public static DateTime GetGMTDateTime(int Value)
{
//秒数转时间日期
//GMT时间从2000年1月1日开始,先把它作为赋为初值
long Year = 2000, Month = 1, Day = 1;
long Hour = 0, Min = 0, Sec = 0;
//临时变量
long iYear = 0, iDay = 0;
long iHour = 0, iMin = 0, iSec = 0;
//计算文件创建的年份
iYear = Value / (365 * 24 * 60 * 60);
Year = Year + iYear;
//计算文件除创建整年份以外还有多少天
iDay = (Value % (365 * 24 * 60 * 60)) / (24 * 60 * 60);
//把闰年的年份数计算出来
int RInt = 0;
for (int i = 2000; i < Year; i++)
{
if ((i % 4) == 0)
RInt = RInt + 1;
}
//计算文件创建的时间(几时)
iHour = ((Value % (365 * 24 * 60 * 60)) % (24 * 60 * 60)) / (60 * 60);
Hour = Hour + iHour;
//计算文件创建的时间(几分)
iMin = (((Value % (365 * 24 * 60 * 60)) % (24 * 60 * 60)) % (60 * 60)) / 60;
Min = Min + iMin;
//计算文件创建的时间(几秒)
iSec = (((Value % (365 * 24 * 60 * 60)) % (24 * 60 * 60)) % (60 * 60)) % 60;
Sec = Sec + iSec;
DateTime t = new DateTime((int)Year, (int)Month, (int)Day, (int)Hour, (int)Min, (int)Sec);
DateTime t1 = t.AddDays(iDay - RInt);
return t1;
}
///
/// 将c# DateTime时间格式转换为Unix时间戳格式
///
/// 时间
/// long
public static long ConvertDateTimeToInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
long t = (time.Ticks - startTime.Ticks) / 10000; //除10000调整为13位
return t;
}
}
}