您的位置:1010cc时时彩经典版 > 1010cc安卓版 > 1010cc时时彩经典版算算多个日子之间的干活日数

1010cc时时彩经典版算算多个日子之间的干活日数

发布时间:2019-08-18 03:25编辑:1010cc安卓版浏览(198)

    转自:http://www.maomao365.com/?p=6771

    /**//**//**//// <summary>
    /// 总结八个日子之间的干活日数,(星期6,礼拜天,不算专业日)dt1和dt2之间相隔有一些专门的学问日,个中dt3-dt4的日子为公共休假期,这里公共休假日能够用来个数组,也许从几个xml表里面读取,以便扣除
    /// </summary>
    /// <param name="dt1">要计算的开首时间</param>
    /// <param name="dt2">要总计的达成时间</param>
    /// <param name="dt3">公休早先时间</param>
    /// <param name="dt4">公休停止时间</param>
    /// <returns>intReturn</returns>
    private int DifferDate(DateTime dt1,DateTime dt2,DateTime dt3,DateTime dt4)
    {
    int intReturn=0;//再次来到值,即dt2和dt1之间的行事日数

    1、查询指定时期距离的工作日

    1、查询指定时期距离的职业日

    1. cron表明式格式:

    摘要:

    System.TimeSpan tsDiffer=dt2.Date-dt1.Date;//计算dt2和dt1之间相差多少天
    int intDiffer=tsDiffer.Days;//相差天数的int值
    for(int i=0;i<intDiffer;i )//从dt1开头一每十二十七日加,判别不经常的日期值是或不是周六或周末,假如既不是礼拜六,亦不是周天,况且也不在dt3和dt4之间,则该天为专门的学业日,intReturn加1
    {
        DateTime dtTemp=dt1.Date.AddDays(i);
        if((dtTemp.DayOfWeek!=System.DayOfWeek.Sunday) && (dtTemp.DayOfWeek!=System.DayOfWeek.Saturday))
        {
            if((dtTemp.Date<dt3.Date) || (dtTemp.Date>dt4.Date))
            {
                intReturn ;
            }
        }
       
    }
    return intReturn;

    其一着重难点是法定节日,国家的官方节日每年都不同,还关系到调休,所以我们布置一个假日表。首要字段有年度,类型(是还是不是调休),假日日期。如下:

    其一第一难题是法定节日,国家的法定节日年年都差异,还关乎到调休,所以我们陈设三个假期表。重要字段有年度,类型(是或不是调休),假日日期。如下:

    {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}

    下文陈说专门的工作中,须要获得钦赐日期在后一个月的职业日

    }

     CREATE TABLE [dbo].[Holidays](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Holiday] [datetime2](7) NULL,--假期日期
    
    [YearS] [char](4) NULL,--年份
    [daytype] [int] NULL--类型
    
    )
    
     CREATE TABLE [dbo].[Holidays](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Holiday] [datetime2](7) NULL,--假期日期
    
    [YearS] [char](4) NULL,--年份
    [daytype] [int] NULL--类型
    
    )
    
    1. cron表达式各占位符解释:

      

      

    {秒数} ==> 允许值范围: 01010cc时时彩经典版,~59 ,不允许为空值,若值不合规,调节器将抛出SchedulerException非常

    下文陈述常规的钦命职业日所在月的造化深入分析,
    福寿无疆思路:
    1 生成多少个国家法定假期表(A),非星期天,星期日
    2 生成三个国家法定补办表(B),涉及星期日周六调班
    3 生成内定月份的日子流水表(C)
    4 获取钦点日期的职业日消息,如下所示:

    加多好当年的假期和调休日期

    加多好当年的假期和调休日期

    "*" 代表每隔1分钟触发;

    --例: 获取 2018-4-10 为2018年4月的第几个工作日
    declare @d datetime
    set @d ='2018-4-10' --可通过下面的方法计算出 为本月第6个工作日
    
    ---1:获取4月指定日期的所在月工作日数
    create table A(A datetime)
    create table B(B datetime)
    ----4.5.4.6 4.7 4.30为法定假日
    insert into A (A)values('2018-4-5'),
    ('2018-4-6'),('2018-4-7'),('2018-4-30')
    ----补班日 4月8 4月28 4月30 日
    insert into B (B)values('2018-4-8'),
    ('2018-4-28'),('2018-4-30')
    
    ---生成指定月份(4月)所有天数流水
    set datefirst 1 --设置星期一为第一个工作日
    
    select * from 
    (
    
    select row_number() over(order by d asc ) as [本月第*个工作日],d,datepart(w,d) as [weekInfo] from (
    select dateadd(day,number,'2018-4-1') as d from master..spt_values 
    where type='p' 
    and number >=0 
    and dateadd(day,number,'2018-4-1') between '2018-4-1' and dateadd(day,-1,'2018-5-1')
    ) as a 
    where a.d not in (select A from A)
    and (a.d in (select b from B ) 
    or datepart(w,a.d) not in (6,7) 
    )
    ) as extend 
    where d =@d 
    
    go
    drop table A 
    drop table B
    

    写个点子总结出除开法定假日的专门的学业日

    写个章程计算出除开法定假日的工作日

    "," 代表在钦点的秒数触发,比如"0,15,45"代表0秒、15秒和45秒时接触任务

    1010cc时时彩经典版 1

    ALTER FUNCTION [dbo].[GetWorkerDays]
    
    (
    
    -- Add the parameters for the function here
    
     @StartTime DATETIME, -- 起始时间
    
     @EndTime DATETIME -- 结束时间,查询默认小于此时间
    
    )
    
    RETURNS INT
    
    AS
    
    BEGIN 
    
    DECLARE @Total INT;
    
    DECLARE @Temp INT;
    
    DECLARE @Days INT;
    
    DECLARE @Index INT;
    
    SET @Days = DATEDIFF(DAY,@StartTime,@EndTime);
    
    SET @Index = 0;
    
    SET @Temp = 0;
    
    SET @Total = 0;
    
    WHILE @Index < @Days BEGIN 
    
    SET @Temp = DatePart(WEEKDAY,DATEADD(DAY,@Index,@StartTime));
    
    IF @Temp > 1 AND @Temp < 7 BEGIN 
    
    SET @Total = @Total   1;
    
    END 
    
    SET @Index = @Index   1;
    
    END 
    
    RETURN ISNULL(@Total,0)
    
    END
    
    ALTER FUNCTION [dbo].[GetWorkerDays]
    
    (
    
    -- Add the parameters for the function here
    
     @StartTime DATETIME, -- 起始时间
    
     @EndTime DATETIME -- 结束时间,查询默认小于此时间
    
    )
    
    RETURNS INT
    
    AS
    
    BEGIN 
    
    DECLARE @Total INT;
    
    DECLARE @Temp INT;
    
    DECLARE @Days INT;
    
    DECLARE @Index INT;
    
    SET @Days = DATEDIFF(DAY,@StartTime,@EndTime);
    
    SET @Index = 0;
    
    SET @Temp = 0;
    
    SET @Total = 0;
    
    WHILE @Index < @Days BEGIN 
    
    SET @Temp = DatePart(WEEKDAY,DATEADD(DAY,@Index,@StartTime));
    
    IF @Temp > 1 AND @Temp < 7 BEGIN 
    
    SET @Total = @Total   1;
    
    END 
    
    SET @Index = @Index   1;
    
    END 
    
    RETURN ISNULL(@Total,0)
    
    END
    

    "-" 代表在钦赐的限量内接触,比方"25-45"代表从25秒起始触发到45秒甘休触发,每隔1秒触发1次

      

      

    "/" 代表触发步进(step),"/"前边的值代表伊始值("*"等同"0"),前边的值代表偏移量,举个例子"0/20"大概"*/20"代表从0分钟发轫,每隔20分钟触发1次,即0秒触发1次,20秒触发1次,40秒触发1次;"5/20"代表5秒触发1次,25秒触发1次,45秒触发1次;"10-45/20"代表在[10,45]内步进20秒命中的时间点触发,即10秒触发1次,30秒触发1次

    施行那么些表值函数后增加调休日和减去法定休假就是职业日了,我们能够再写一个仓库储存进度。

    实行这么些表值函数后增进调休日和减去法定休假就是专门的学问日了,我们可以再写贰个储存进程。

    {分钟} ==> 允许值范围: 0~59 ,不容许为空值,若值不合规,调节器将抛出SchedulerException格外

     

     

    "*" 代表每隔1分钟触发;

    2,总括钦定日期段的停歇日

    2,总括内定日期段的休憩日

    "," 代表在钦定的分钟触发,举例"10,20,40"代表10分钟、20分钟和40分钟时接触职责

    那几个跟那么些相反,正是周天丰硕法定休假在收缩调休日

    这些跟那多少个相反,就是周日丰裕法定休假在减弱调休日

    "-" 代表在钦点的限制内接触,比方"5-30"代表从5分钟初阶触发到30分钟甘休触 发,每隔1分钟触发

    大家写三个函数

    作者们写三个函数

    "/" 代表触发步进(step),"/"后面包车型客车值代表初叶值("*"等同"0"),后边的值代表偏移量,举个例子"0/25"或许"*/25"代表从0分钟起头,每隔25分钟触发1次,即0分钟触发1次,第25分钟触发1次,第50分钟触发1次;"5/25"代表5分钟触发1次,30分钟触发1次,55分钟触发1次;"10-45/20"代表在[10,45]内步进20分钟命中的时间点触发,即10分钟触发1次,30秒钟触发1次

    ALTER FUNCTION GetRestDays
    
    (
    
    @StartTime DATETIME2,
    
    @EndTime DATETIME2
    
    )
    
    RETURNS INT
    
    AS
    
    BEGIN
    
    DECLARE @LegalRest INT --法定假期
    
    DECLARE @AdjustmentDay INT--调休上班时间
    
    DECLARE @SurplusDay INT --剩余工作日
    
    DECLARE @CountDay INT --总共天数
    
    
    
    SELECT @LegalRest=COUNT(0) FROM dbo.Holidays WHERE daytype=1 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) 
    
    AND Holiday>=@StartTime AND Holiday<=@EndTime
    
    
    
    SELECT  @AdjustmentDay=COUNT(0) FROM dbo.Holidays WHERE daytype=2 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) 
    
    AND Holiday>=@StartTime AND Holiday<=@EndTime
    
     SET @SurplusDay= [dbo].[GetWorkerDays](@StartTime,DATEADD(DAY,1,@EndTime))--剩余工作日
    
     SELECT @CountDay=COUNT(0) FROM dbo.TimeSpanDays(@StartTime ,DATEADD(DAY,1,@EndTime))  --总共天数  计算出 时间段总共天数
    
     return @CountDay-@SurplusDay @LegalRest-@AdjustmentDay
    
    END
    
    ALTER FUNCTION GetRestDays
    
    (
    
    @StartTime DATETIME2,
    
    @EndTime DATETIME2
    
    )
    
    RETURNS INT
    
    AS
    
    BEGIN
    
    DECLARE @LegalRest INT --法定假期
    
    DECLARE @AdjustmentDay INT--调休上班时间
    
    DECLARE @SurplusDay INT --剩余工作日
    
    DECLARE @CountDay INT --总共天数
    
    
    
    SELECT @LegalRest=COUNT(0) FROM dbo.Holidays WHERE daytype=1 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) 
    
    AND Holiday>=@StartTime AND Holiday<=@EndTime
    
    
    
    SELECT  @AdjustmentDay=COUNT(0) FROM dbo.Holidays WHERE daytype=2 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) 
    
    AND Holiday>=@StartTime AND Holiday<=@EndTime
    
     SET @SurplusDay= [dbo].[GetWorkerDays](@StartTime,DATEADD(DAY,1,@EndTime))--剩余工作日
    
     SELECT @CountDay=COUNT(0) FROM dbo.TimeSpanDays(@StartTime ,DATEADD(DAY,1,@EndTime))  --总共天数  计算出 时间段总共天数
    
     return @CountDay-@SurplusDay @LegalRest-@AdjustmentDay
    
    END
    

    {时辰} ==> 允许值范围: 0~23 ,不容许为空值,若值不合规,调整器将抛出SchedulerException非常

    本文由1010cc时时彩经典版发布于1010cc安卓版,转载请注明出处:1010cc时时彩经典版算算多个日子之间的干活日数

    关键词: