using System;
namespace WalkingTec.Mvvm.Core.Extensions
{
///
/// DateTime Helper
///
public static class DateTimeHelper
{
#region DateTime Helper
public static int WeekOfYear(this DateTime self)
{
var startDayOfYear = new DateTime(self.Year,1,1);
var weekOffset = 7 - ( startDayOfYear.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)startDayOfYear.DayOfWeek) + 1;
var weekOfYear = (int)Math.Ceiling((self.DayOfYear - weekOffset) / 7.0 + (weekOffset == 0 ? 0 : 1));
return weekOfYear;
}
///
/// 获取 指定的一周所在年份 的开始及结束时间
///
/// 所在年份
/// 周数
/// 指定周开始时间
/// 指定周结束时间
public static void WeekDays(int yearNum, int weekOfYear, out DateTime startDay, out DateTime endDay)
{
var startDayOfYear = new DateTime(yearNum,1,1,0,0,0);
var weekOffset = 7 - ( startDayOfYear.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)startDayOfYear.DayOfWeek) + 1;
startDay = startDayOfYear.AddDays(7 * (weekOfYear - (weekOffset == 0 ? 0 : 1)) + weekOffset - 7);
endDay = startDay.AddDays(7);
}
#endregion
#region DateTime Extensions
private static readonly DateTime _jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0,DateTimeKind.Utc);
///
/// UTC 1970/01/01 00:00:00
///
public static DateTime Jan1st1970 => _jan1st1970;
///
/// 时间戳 ms
///
///
/// 返回标准时间戳 单位 毫秒 注:从 1970/01/01 00:00:00 开始
public static long ToMilliseconds(this DateTime self)
{
return (long)(self.ToUniversalTime() - Jan1st1970).TotalMilliseconds;
}
///
/// 时间戳 microsecond
///
///
/// 返回标准时间戳 单位 微秒 注:从 1970/01/01 00:00:00 开始
public static long ToMicroseconds(this DateTime self)
{
return (long)((self.ToUniversalTime() - Jan1st1970).TotalMilliseconds * 1000);
}
///
/// 获取当前时间所在周的开始及结束时间
///
///
/// 指定周开始时间
/// 指定周结束时间
public static void WeekDays(this DateTime self, out DateTime startDay, out DateTime endDay)
{
WeekDays(self.Year, self.WeekOfYear(), out startDay, out endDay);
}
#endregion
}
}