Chinaunix首页 | 论坛 | 博客
  • 博客访问: 706182
  • 博文数量: 145
  • 博客积分: 3446
  • 博客等级: 中校
  • 技术积分: 1567
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-30 13:58
文章分类

全部博文(145)

文章存档

2021年(1)

2020年(1)

2019年(1)

2018年(6)

2017年(1)

2016年(10)

2015年(12)

2014年(10)

2013年(15)

2012年(33)

2011年(21)

2010年(9)

2009年(18)

2008年(2)

2006年(5)

我的朋友

分类: 系统运维

2012-08-02 16:40:20

SCAL函数组日历功能有以下8个函数:
1)DATE_COMPUTE_DAY 根据日期返回的星期值:根据输入一个日期,返回该日期是每周中第几个,注意周日是每周的第7天,周一是每周的第1天.其实这个函数很简单,就是利用每周7天的原理,进行除得到余数,标准的函数是以周日为第一天,所以增加了判断
IF DAY_P > 1.
     DAY_P = DAY_P - 1.
ELSE.
     DAY_P = DAY_P + 6.
ENDIF.
如果按我国习惯,周日为第1天时,则判断可以变成:
IF DAY_P < 1.
     DAY_P = DAY_P + 7.
ENDIF.
2)DATE_CONVERT_TO_FACTORYDATE 根据日期返回工厂日历日期:有些国家有自己的传统节日,或者有些企业工作日有些不同,比如六天制,七天制,所以可以设置不同的工厂日历,该函数则是输入一个日期、工厂日历标识、工作日计算方法的标识(+与-两种情况,+表示如果输入的日期在工厂日历中并非工作日,则返回的日期为输入日期的后一个工作日,-表示如果输入的日期在工厂日历中并非工作日,则返回的日期为输入日期的前一个工作日),输出转化为工厂日历日期的日期(如果输入日期为工厂日历中的工作日,则返回输入日期,如果不是,则是前/后一个工作日)、指定日历中的工作日数(输入日期在工厂日历中的工作日的顺序,这跟工厂日期的“工厂日期开始”有关,空时默认为0,第1个工作日="工厂日期开始"+1)、表示某日期是否为工作日的标志(如果为工作日则为空,否则将是输入工作日计算方法的标识)
3)DATE_GET_WEEK 返回某日期所在的礼拜:根据输入日期,返回该日期所在年份中的周数,注意周日是第7天,如果该周日在哪一年,则相应周的其他日期也在哪一年。比如2008-12-31是周三,该周的周日是2009-01-04是2009年的第一周,所以输入2008-12-31时,返回是200901。
4)EASTER_GET_DATE 返回一个年度的复活节日期(复活节,复活节星期日):输入年份,返回当年复活节的日期。耶稣被钉死在十字架上,第三天身体复活,复活节因此得名。复活节是基督宗教最重大的节日,重要性超过圣诞节,宗教起源与节期在欧美各国。节期大致在3月22日至4月25日之间。
5)FACTORYDATE_CONVERT_TO_DATE 根据一个工厂日历日期返回的日期:输入工厂日历ID与工作日的序列号,返回工作日的日期,工作日的序列号与“工厂日期开始”相关,即输入的工作日序列号必须大于等于“工厂日期开始”,否则返回空值。
6)HOLIDAY_CHECK_AND_GET_INFO 检查日期是否是公共假日并在需要时提供信息:输入一个日期、假日日历 ID、属性标识,输出是否为假日的标记以及该假日的属性。
7)LAST_FACTORYDATE_GET Calendar function: Return last factory date for a factory calendar:输入工厂日期ID,返回最后一个工作日以及工作日数。
8)WEEK_GET_FIRST_DAY 返回一周的第一天:输入年份与周数,返回该周的第1天,注意是从周一开始算。
 
*  根据工厂日历添加正负N天获得新日期
  DATA: return LIKE sy-subrc .
    CALL FUNCTION 'BKK_ADD_WORKINGDAY'
      EXPORTING
        i_date      = p_date1
        i_days      = p_days
        i_calendar1 = p_cal
      IMPORTING
        e_date      = p_date2
        e_return    = return.

*  根据工厂日历计算两个日期间的工作日(包含结束日期)
FORM get_work_days USING value(p_date1) value(p_date2) p_days p_cal.
  DATA: no_workingday,holiday.
  WHILE p_date1 < p_date2.
    p_date1 = p_date1 + 1.
    CALL FUNCTION 'BKK_CHECK_HOLIDAY'
      EXPORTING
        i_date            = p_date1
        i_calendar1       = p_cal
      IMPORTING
        e_x_no_workingday = no_workingday
        e_x_is_holiday    = holiday
      EXCEPTIONS
        not_found         = 1
        calendar_error    = 2
        OTHERS            = 3.
    IF no_workingday <> 'X'.
      p_days = p_days + 1.
    ENDIF.
  ENDWHILE.
ENDFORM.                    "get_work_days
 
 CALL FUNCTION ’DATE_COMPUTE_DAY‘    返回星期几
CALL FUNCTION ’DATE_CHECK_WORKINGDAY‘  返回是否为工作日
  CALL FUNCTION 'MONTH_PLUS_DETERMINE'
    EXPORTING
      months  = '1'
      olddate = sy-datum
    IMPORTING
      newdate = lv_p_date.
 
  CALL FUNCTION 'LAST_DAY_OF_MONTHS'
    EXPORTING
      day_in            = lt_date-first_date
    IMPORTING
      last_day_of_month = lt_date-last_date
    EXCEPTIONS
      day_in_no_date    = 1
      OTHERS            = 2.
 
 SEPA_MANDATE_ADD_MONTH_TO_DATE
计算 日期加减几个月的函数


阅读(5030) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~