获得本月最后一天
来源:互联网 发布:知敬畏明底线 编辑:程序博客网 时间:2024/04/19 18:45
获得本月最后一天在abap里还是非常方便的,大概分的话有两种方法,一是自己算,而是调用系统函数。两个我都分别演示下。
1.自己运算
date+6(2) = '1'.
date+4(2) = date+4(2) + 1.
date = date - 1.
这个自己写的有个缺陷,如果为12月的话月份加一全部都变为0.所以还得添加判断的情况,修改后如下:
date+6(2) = '1'.
IF date+4(2) eq '12'.
date+6(2) = '31'.
ELSe.
date+4(2) = date+4(2) + 1.
date = date - 1.
ENDIF.
2.调用系统函数
系统函数有两个函数,让我感觉奇怪的是居然有一个是有错误的!
错误的一个函数名是DATE_GET_MONTH_LASTDAY。它的具体实现我看了下果然是不对的,如下:
DATA:
BEGIN OF ls_date,
year(4) TYPE n,
month(2) TYPE n,
day(2) TYPE n,
END OF ls_date.
DATA: l_date_tmp TYPE sy-datum.
ls_date = i_date.
ls_date-month = ls_date-month + 1.
ls_date-day = 1.
l_date_tmp = ls_date.
* no special "leap year" algorithm necessary: in SAP NW we trust...
l_date_tmp = l_date_tmp - 1.
e_date = l_date_tmp.
它程序可读性还是挺高的,用了一个结构体来表示年月日。但是如果是12月的话结果就会错,跟我上面自己写的程序一样。
正确的一个系统调用程序名是:BKK_GET_MONTH_LASTDAY。
实现是:
DATA: CHECK_YEAR_1 TYPE P.
DATA: CHECK_YEAR_2 TYPE P.
E_DATE(4) = I_DATE(4).
E_DATE+4(2) = I_DATE+4(2).
IF I_DATE+4(2) = '01'
OR I_DATE+4(2) = '03'
OR I_DATE+4(2) = '05'
OR I_DATE+4(2) = '07'
OR I_DATE+4(2) = '08'
OR I_DATE+4(2) = '10'
OR I_DATE+4(2) = '12'.
E_DATE+6(2) = '31'. " 31 days per month
ELSEIF I_DATE+4(2) = '04'
OR I_DATE+4(2) = '06'
OR I_DATE+4(2) = '09'
OR I_DATE+4(2) = '11'.
E_DATE+6(2) = '30'. " 30 days per month
ELSEIF I_DATE+4(2) = '02'. " leap year - problem
E_DATE+6(2) = '28'.
CHECK_YEAR_1 = I_DATE(4) MOD 4. " all 4 years is leap year
IF CHECK_YEAR_1 = 0.
E_DATE+6(2) = '29'.
CHECK_YEAR_1 = I_DATE(4) MOD 100." but not all 100 years
CHECK_YEAR_2 = I_DATE(4) MOD 400." excluding all 400 years
IF CHECK_YEAR_1 = 0
AND CHECK_YEAR_2 <> 0.
E_DATE+6(2) = '28'.
ENDIF.
ENDIF.
ENDIF.
比较傻瓜的实现,但是结果肯定是对的。个人觉得我总结的很详细,如有转载请注明出处!呵呵。
又发现了一个新的函数 RP_LAST_DAY_OF_MONTHS 同样获得本月最后一天。
CONCATENATE pa_year pa_month '01' INTO gv_time.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = gv_time
IMPORTING
last_day_of_month = gv_date_last
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
- 获得本月最后一天
- 获得本月的第一天和最后一天
- sql获得本周,本月,本年第一天最后一天
- ASP获得上月、本月、下月的第一和最后一天
- 本月的最后一天
- 获取本月最后一天
- SQL如何获得本季度第一天、一年的第一天、本月的最后一天等
- SQL如何获得本季度第一天、一年的第一天、本月的最后一天
- C# 本月中最后一天
- 取本月的最后一天
- C#取本月最后一天
- 查询本月的最后一天
- php前一天,本月最后一天
- Java 获取本月最后一天
- C#、VB获取本月第一天、本月最后一天
- c#取本月的最后一天
- 本月第一天和最后一天sql语句
- c#取本月的最后一天
- Fedora 9 安装OMNet++
- 求问delete和delete[] 的区别
- FCKeditor在线编辑器的使用
- Spring In Action (1) -- HelloWorld
- 衣服很好看
- 获得本月最后一天
- 今天开博客啦,博客定性
- ERP的管理思想
- 郁闷,怎么发的文没了?
- JDK源代码分析聚集篇-------Set分析(我们大家都是第一无二的)
- 马云经典语录
- JUnit 学习文档
- 页面距离位置整理
- 数据结构和算法分析实验(一)