using System;
using System.Text;
namespace Thousandto.Core.Base
{
///
/// 时间的帮助类
///
public class TimeUtils
{
private static DateTime _notZoneStartTime = new DateTime(1970, 1, 1);
private static DateTime _localZoneStartTime = TimeZone.CurrentTimeZone.ToLocalTime(_notZoneStartTime);
///
/// DateTime时间格式转换为Unix时间戳格式
///
/// DateTime时间格式
/// Unix时间戳格式
///
public static int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = _localZoneStartTime;
return (int)(time - startTime).TotalSeconds;
}
///
/// 返回当前时间的时间戳
///
/// 当前时间的时间戳
///
public static int GetNow()
{
System.DateTime startTime = _localZoneStartTime;
return (int)(System.DateTime.Now - startTime).TotalSeconds;
}
///
/// 时间戳转为C#格式时间
///
/// Unix时间戳格式
/// C#格式时间
///
public static DateTime GetTime(string timeStamp)
{
DateTime dtStart = _localZoneStartTime;
long lTime = long.Parse(timeStamp) * 10000000;
TimeSpan toNow = new TimeSpan(lTime);
return dtStart.Add(toNow);
}
///
/// 字符串生成MD5码
///
///
///
public static string Md5Sum(string input)
{
System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
///
/// 把数据timedate分割,
///
/// 单位是 秒
/// 天
/// 小时
/// 分钟
/// 秒
public static void SplitTime(UInt64 timeData, out UInt64 d, out UInt64 h, out UInt64 m, out UInt64 s)
{
d = timeData / 86400;
timeData = timeData % 86400;
h = timeData / 3600;
timeData = timeData % 3600;
m = timeData / 60;
s = timeData % 60;
}
// 时间戳转为C#格式时间
public static string StampToDateTime(UInt64 timeStamp, String format = "yyyy-MM-dd")
{
DateTime dateTimeStart = _localZoneStartTime;
long lTime = (long)timeStamp * 10000000;
TimeSpan toNow = new TimeSpan(lTime);
return dateTimeStart.Add(toNow).ToString(format);
}
// 时间戳转为C#格式时间,无时区计算
public static string StampToDateTimeNotZone(UInt64 timeStamp, String format = "yyyy-MM-dd")
{
DateTime dateTimeStart = _notZoneStartTime;
long lTime = (long)timeStamp * 10000000;
TimeSpan toNow = new TimeSpan(lTime);
return dateTimeStart.Add(toNow).ToString(format);
}
public static int GetSystemTicksMS()
{
// TickCount cycles between Int32.MinValue, which is a negative
// number, and Int32.MaxValue once every 49.8 days. This sample
// removes the sign bit to yield a nonnegative number that cycles
// between zero and Int32.MaxValue once every 24.9 days.
return Environment.TickCount & Int32.MaxValue;
}
//获取系统Tick的秒
public static float GetSystemTicksS()
{
// TickCount cycles between Int32.MinValue, which is a negative
// number, and Int32.MaxValue once every 49.8 days. This sample
// removes the sign bit to yield a nonnegative number that cycles
// between zero and Int32.MaxValue once every 24.9 days.
return (float)(Environment.TickCount & Int32.MaxValue)/1000f;
}
//通过秒获取C#格式时间
public static DateTime DateTimeFromSecords(int seconds)
{
DateTime dateTimeStart = _localZoneStartTime;
dateTimeStart.AddSeconds(seconds);
return dateTimeStart;
}
///
/// 计算剩余时间
///
/// 从服务器更新下来的剩余结束时间
/// 从服务器更新时的当前时间
///
public static int GetRemainTime(int serverRemainTime, DateTime refreshDateTime)
{
var ts = DateTime.Now - refreshDateTime;
var s = (int)Math.Round(serverRemainTime - (float)(ts.TotalSeconds));
if (s < 0) s = 0;
return s;
}
///
/// 获取相差多少天
///
///
///
///
public static int GetDayOffset(int startTime, int curTime)
{
DateTime dateTimeStart = _localZoneStartTime;
dateTimeStart = dateTimeStart.AddSeconds(startTime);
var start = new DateTime(dateTimeStart.Year, dateTimeStart.Month, dateTimeStart.Day);
DateTime dateTimeCur = _localZoneStartTime;
dateTimeCur = dateTimeCur.AddSeconds(curTime);
var cur = new DateTime(dateTimeCur.Year, dateTimeCur.Month, dateTimeCur.Day);
return (int)(cur - start).TotalDays;
}
///
/// 获取星期
///
///
///
public static int GetStampTimeWeekly(int seconds)
{
DateTime dateTime = _localZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return (int)dateTime.DayOfWeek;
}
///
/// 获取小时
///
///
///
public static int GetStampTimeHH(int seconds)
{
DateTime dateTime = _localZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return dateTime.Hour;
}
///
/// 获取分钟
///
///
///
public static int GetStampTimeMM(int seconds)
{
DateTime dateTime = _localZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return dateTime.Minute;
}
///
/// 获取秒
///
///
///
public static int GetStampTimeSS(int seconds)
{
DateTime dateTime = _localZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return dateTime.Second;
}
///
/// 获取星期
///
///
///
public static int GetStampTimeWeeklyNotZone(int seconds)
{
DateTime dateTime = _notZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return (int)dateTime.DayOfWeek;
}
///
/// 获取相差多少天
///
///
///
///
public static int GetDayOffsetNotZone(int startTime, int curTime)
{
DateTime dateTimeStart = _notZoneStartTime;
dateTimeStart = dateTimeStart.AddSeconds(startTime);
var start = new DateTime(dateTimeStart.Year, dateTimeStart.Month, dateTimeStart.Day);
DateTime dateTimeCur = _notZoneStartTime;
dateTimeCur = dateTimeCur.AddSeconds(curTime);
var cur = new DateTime(dateTimeCur.Year, dateTimeCur.Month, dateTimeCur.Day);
return (int)(cur - start).TotalDays;
}
///
/// 获取小时
///
///
///
public static int GetStampTimeHHNotZone(int seconds)
{
DateTime dateTime = _notZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return dateTime.Hour;
}
///
/// 获取分钟
///
///
///
public static int GetStampTimeMMNotZone(int seconds)
{
DateTime dateTime = _notZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return dateTime.Minute;
}
///
/// 获取秒
///
///
///
public static int GetStampTimeSSNotZone(int seconds)
{
DateTime dateTime = _notZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
return dateTime.Second;
}
//获取时分秒
public static void GetStampTimeHHMMSS(int seconds, out int h, out int m, out int s)
{
DateTime dateTime = _localZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
h = dateTime.Hour;
m = dateTime.Minute;
s = dateTime.Second;
}
//获取时分秒
public static void GetStampTimeHHMMSSNotZone(int seconds, out int h, out int m, out int s)
{
DateTime dateTime = _notZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
h = dateTime.Hour;
m = dateTime.Minute;
s = dateTime.Second;
}
//获取周时分秒
public static void GetStampTimeWeekHHMMSS(int seconds, out int weekDay, out int h, out int m, out int s)
{
DateTime dateTime = _localZoneStartTime;
dateTime = dateTime.AddSeconds(seconds);
weekDay = (int)dateTime.DayOfWeek;
h = dateTime.Hour;
m = dateTime.Minute;
s = dateTime.Second;
}
}
}