| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- using System;
- using System.Globalization;
- using System.Runtime.InteropServices;
- namespace Masuit.Tools.DateTimeExt
- {
- /// <summary>
- /// 日期时间帮助类
- /// </summary>
- public static class DateTimeHelper
- {
- /// <summary>
- /// 获取某一年有多少周
- /// </summary>
- /// <param name="_"></param>
- /// <param name="year">年份</param>
- /// <returns>该年周数</returns>
- public static int GetWeekAmount(this DateTime _, int year)
- {
- var end = new DateTime(year, 12, 31); //该年最后一天
- var gc = new GregorianCalendar();
- return gc.GetWeekOfYear(end, CalendarWeekRule.FirstDay, DayOfWeek.Monday); //该年星期数
- }
- /// <summary>
- /// 返回年度第几个星期 默认星期日是第一天
- /// </summary>
- /// <param name="date">时间</param>
- /// <returns>第几周</returns>
- public static int WeekOfYear(this DateTime date)
- {
- var gc = new GregorianCalendar();
- return gc.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
- }
- /// <summary>
- /// 返回年度第几个星期
- /// </summary>
- /// <param name="date">时间</param>
- /// <param name="week">一周的开始日期</param>
- /// <returns>第几周</returns>
- public static int WeekOfYear(this DateTime date, DayOfWeek week)
- {
- var gc = new GregorianCalendar();
- return gc.GetWeekOfYear(date, CalendarWeekRule.FirstDay, week);
- }
- /// <summary>
- /// 得到一年中的某周的起始日和截止日
- /// 年 nYear
- /// 周数 nNumWeek
- /// 周始 out dtWeekStart
- /// 周终 out dtWeekeEnd
- /// </summary>
- /// <param name="_"></param>
- /// <param name="nYear">年份</param>
- /// <param name="nNumWeek">第几周</param>
- /// <param name="dtWeekStart">开始日期</param>
- /// <param name="dtWeekeEnd">结束日期</param>
- public static void GetWeekTime(this DateTime _, int nYear, int nNumWeek, out DateTime dtWeekStart, out DateTime dtWeekeEnd)
- {
- var dt = new DateTime(nYear, 1, 1);
- dt += new TimeSpan((nNumWeek - 1) * 7, 0, 0, 0);
- dtWeekStart = dt.AddDays(-(int)dt.DayOfWeek + (int)DayOfWeek.Monday);
- dtWeekeEnd = dt.AddDays((int)DayOfWeek.Saturday - (int)dt.DayOfWeek + 1);
- }
- /// <summary>
- /// 得到一年中的某周的起始日和截止日 周一到周五 工作日
- /// </summary>
- /// <param name="_"></param>
- /// <param name="nYear">年份</param>
- /// <param name="nNumWeek">第几周</param>
- /// <param name="dtWeekStart">开始日期</param>
- /// <param name="dtWeekeEnd">结束日期</param>
- public static void GetWeekWorkTime(this DateTime _, int nYear, int nNumWeek, out DateTime dtWeekStart, out DateTime dtWeekeEnd)
- {
- var dt = new DateTime(nYear, 1, 1);
- dt += new TimeSpan((nNumWeek - 1) * 7, 0, 0, 0);
- dtWeekStart = dt.AddDays(-(int)dt.DayOfWeek + (int)DayOfWeek.Monday);
- dtWeekeEnd = dt.AddDays((int)DayOfWeek.Saturday - (int)dt.DayOfWeek + 1).AddDays(-2);
- }
- #region P/Invoke 设置本地时间
- [DllImport("kernel32.dll")]
- private static extern bool SetLocalTime(ref SystemTime time);
- [StructLayout(LayoutKind.Sequential)]
- private struct SystemTime
- {
- public short year;
- public short month;
- public short dayOfWeek;
- public short day;
- public short hour;
- public short minute;
- public short second;
- public short milliseconds;
- }
- /// <summary>
- /// 设置本地计算机时间
- /// </summary>
- /// <param name="dt">DateTime对象</param>
- public static void SetLocalTime(this DateTime dt)
- {
- SystemTime st;
- st.year = (short)dt.Year;
- st.month = (short)dt.Month;
- st.dayOfWeek = (short)dt.DayOfWeek;
- st.day = (short)dt.Day;
- st.hour = (short)dt.Hour;
- st.minute = (short)dt.Minute;
- st.second = (short)dt.Second;
- st.milliseconds = (short)dt.Millisecond;
- SetLocalTime(ref st);
- }
- #endregion
- }
- }
|