• 获取 当前时间 本周,本月,本季度,本年的起始时间


    因为项目中需要用时间作为条件进行统计,所以需要获取 当前时间 本周,本月,本季度,本年的起始时间,代码如下

     1 #region 获取 本周、本月、本季度、本年 的开始时间或结束时间
     2         /// <summary>
     3         /// 统计时间类型
     4         /// </summary>
     5         public enum EnumTimeType
     6         {
     7             每周 = 0,
     8             每月 = 1,
     9             每季度 = 2,
    10             每年 = 3,
    11         }
    12         /// <summary>
    13         /// 获取结束时间
    14         /// </summary>
    15         /// <param name="TimeType">Week、Month、Season、Year</param>
    16         /// <param name="now"></param>
    17         /// <returns></returns>
    18         public static DateTime? GetTimeStartByType(EnumTimeType TimeType, DateTime now)
    19         {
    20             DateTime? returnTime = null;
    21             switch (TimeType)
    22             {
    23                 case EnumTimeType.每周:
    24                     if (now.DayOfWeek == 0)
    25                     {
    26                         returnTime = now.AddDays(-6);
    27                     }
    28                     else
    29                     {
    30                         returnTime = now.AddDays(-(int)now.DayOfWeek + 1);
    31                     }
    32 
    33                     break;
    34                 case EnumTimeType.每月:
    35                     returnTime = now.AddDays(-now.Day + 1);
    36                     break;
    37                 case EnumTimeType.每季度:
    38                     var time = now.AddMonths(0 - ((now.Month - 1) % 3));
    39                     returnTime = time.AddDays(-time.Day + 1);
    40                     break;
    41                 case EnumTimeType.每年:
    42                     returnTime = now.AddDays(-now.DayOfYear + 1);
    43                     break;
    44                 default:
    45                     return null;
    46             }
    47             return DateTime.Parse(returnTime.Value.ToString("yyyy/MM/dd 00:00:00"));
    48         }
    49 
    50         /// <summary>
    51         /// 获取结束时间
    52         /// </summary>
    53         /// <param name="TimeType">Week、Month、Season、Year</param>
    54         /// <param name="now"></param>
    55         /// <returns></returns>
    56         public static DateTime? GetTimeEndByType(EnumTimeType TimeType, DateTime now)
    57         {
    58             DateTime? returnTime = null;
    59             switch (TimeType)
    60             {
    61                 case EnumTimeType.每周:
    62                     if (now.DayOfWeek == 0)
    63                     {
    64                         returnTime = now;
    65                     }
    66                     else
    67                     {
    68                         returnTime = now.AddDays(7 - (int)now.DayOfWeek); 
    69             }
    70             break;
    71         case EnumTimeType.每月:
    72             returnTime = now.AddMonths(1).AddDays(-now.AddMonths(1).Day + 1).AddDays(-1);
    73             break;
    74         case EnumTimeType.每季度:
    75             var time = now.AddMonths((3 - ((now.Month - 1) % 3) - 1));
    76             returnTime = time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1);
    77             break;
    78         case EnumTimeType.每年:
    79             var time2 = now.AddYears(1);
    80             returnTime = time2.AddDays(-time2.DayOfYear);
    81             break;
    82         default:
    83             return null;
    84     }
    85     return DateTime.Parse(returnTime.Value.ToString("yyyy/MM/dd 23:59:59"));
    86 }
    87 #endregion 

    调用如下

     1 void Main()
     2 {
     3     GetTimeStartByType(EnumTimeType.每周,DateTime.Now).Dump();
     4     GetTimeEndByType(EnumTimeType.每周, DateTime.Now).Dump();
     5     "------------------------本月------------------------".Dump();
     6     GetTimeStartByType(EnumTimeType.每月, DateTime.Now).Dump();
     7     GetTimeEndByType(EnumTimeType.每月, DateTime.Now).Dump();
     8     "------------------------本季度----------------------".Dump();
     9     GetTimeStartByType(EnumTimeType.每季度, DateTime.Now).Dump();
    10     GetTimeEndByType(EnumTimeType.每季度, DateTime.Now).Dump();
    11     "------------------------本年------------------------".Dump();
    12     GetTimeStartByType(EnumTimeType.每年, DateTime.Now).Dump();
    13     GetTimeEndByType(EnumTimeType.每年, DateTime.Now).Dump();
    14     "------------------今天是本年第几周------- ----------".Dump();
    15     ((DateTime.Now.DayOfYear/7+1)+"").ToString().Dump();
    16 }

    显示结果

    总结,计算这些时间间隔用到了微软提供的DayOfWeek和DayOfYear,真的是很方便了。

    其中周比较 特殊一点,因为DayOfWeek获取星期天的时候值为0,所以需要注意下一。

    需要的人可自行获取。

  • 相关阅读:
    ⑤SpringCloud 实战:引入Zuul组件,开启网关路由
    ④SpringCloud 实战:引入Hystrix组件,分布式系统容错
    ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
    ②SpringCloud 实战:引入Feign组件,发起服务间调用
    Spring 事件监听机制及原理分析
    ①SpringCloud 实战:引入Eureka组件,完善服务治理
    AbstractQueuedSynchronizer(AQS) 总结篇
    源码分析:CountDownLatch 之倒计时门栓
    源码分析:Semaphore之信号量
    Java 虚拟机垃圾回收算法总结
  • 原文地址:https://www.cnblogs.com/widows/p/10895360.html
Copyright © 2020-2023  润新知