无需调频即可工作

2020-09-01 05:01发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨! 我有一个字符串,用户可以...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨!

我有一个字符串,用户可以自己输入。如何查找每个月的所有星期天? 没有不同的功能和FM。 以及如何将字符串转换为日期?

我很乐意提供帮助

5条回答
compass1988
2020-09-01 05:53

月份名称-> T015M

( 避免出现问题,请大写翻译)

在您的要求中,您缺少年份,用户应如何输入年份?

要确定日期:日期MOD 7

1->星期一...

要计数

标识下个月的第一天,例如Date + 0(4)&&(Date + 4( 2)+ 1)&& 01

删除1直到月份更改(或日期= 01)

并进行MOD以确定是否为周日

# p#

这是我对练习代码的建议


 参数p_month类型char20。
 参数p_year TYPE gjahr。





 类别lc_month定义
       最后。


   公共部分。
     方法构造函数
       输入
         iv_language TYPE sylangu可选。
     方法convert_month_from_string
       输入
         iv_month TYPE字串
       正在返回
         VALUE(rv_month_number)个TYPE月份。


   专用部分。
     方法get_all_month_names
       正在返回
         VALUE(rt_month_names)TYPE char10_t。
     方法convert_upper_first_letter
       输入
         iv_word TYPE char10
       正在返回
         VALUE(rv_word_converted)TYPE char10。
     DATA gv_language TYPE语言。


 ENDCLASS。




 类别lc_month实施。


   METHOD构造函数。
     gv_language = COND#(当iv_language不是最初的iv_language
                           ELSE sy-langu)。
   终结法。


   方法convert_month_from_string。
     DATA(lv_month_converted)= convert_upper_first_letter(CONV char10(iv_month))。
     读取表get_all_month_names()
          禁止运输
          WITH KEY table_line = lv_month_converted。
     IF sy-subrc EQ空间。
       rv_month_number = sy-tabix。
     万一。
   终结法。


   方法convert_upper_first_letter。
     rv_word_converted = iv_word。
     压缩rv_word_converted NO-GAPS。
     将rv_word_convert转换为小写。
     将rv_word_converted + 0(1)转换为大写。
   终结法。


   方法get_all_month_names。
     SELECT monam
            进入表rt_month_names
            从t015m
            在何处使用EQ gv_language。
   终结法。


 ENDCLASS。






 类别ltc_month定义
       用于检测
       危险等级危害
       最后。
   专用部分。
     方法it_reads_camel_wording_month用于测试。
     方法it_replies_0_for_unknown用于测试。
 ENDCLASS。


 类别ltc_month实施。


   方法it_reads_camel_wording_month。
     cl_abap_unit_assert => assert_equals(
       行为=新lc_month('E')-> convert_month_from_string('JaNuaRy')
       exp ='01'
       msg ='它应该为JaNuaRy回复01')。
   终结法。


   方法it_replies_0_for_unknown。
     cl_abap_unit_assert => assert_equals(
       行为=新lc_month('E')-> convert_month_from_string('Apple')
       exp ='00'
       msg ="它应该为Apple回复00")。
   终结法。




 ENDCLASS。










 类别lc_day定义
       最后。
   公共部分。
     常量:开始于gc_day_type,
                  星期一TYPE i VALUE 1
                  星期二TYPE I VALUE 2,
                  TYPE I VALUE 3,星期三,
                  星期四TYPE i VALUE 4,
                  TYPE I VALUE 5,
                  星期六TYPE i VALUE 6,
                  TYPE I VALUE,星期天7,
                END OF gc_day_type。
     方法get_numb_of_day_type_for_month
       输入
         iv_month TYPE月
         iv_year TYPE gjahr
         iv_day_type TYPE i
       正在返回
         VALUE(rv_number_of_day_type)TYPE i。
   专用部分。
     方法get_last_day_of_month
       输入
         iv_month TYPE月
         iv_year TYPE gjahr
       正在返回
         VALUE(rv_last_day)TYPE系统。
     方法get_first_day_of_month
       输入
         iv_month TYPE月
         iv_year TYPE gjahr
       正在返回
         VALUE(rv_first_day)TYPE系统。
     方法is_date_a_day_type
       输入
         iv_date TYPE系统
         iv_day_type TYPE i
       正在返回
         VALUE(rv_success)类型abap_bool。
 ENDCLASS。




 类别lc_day实施。


   方法get_numb_of_day_type_for_month。
     DATA(lv_calculation_date)= get_last_day_of_month(iv_month = iv_month
                                                        iv_year = iv_year)。
     做。
       rv_number_of_day_type = COND#(当is_date_a_day_type(iv_date = lv_calculation_date
                                                                iv_day_type = iv_day_type)
                                         然后rv_number_of_day_type + 1
                                       ELSE rv_number_of_day_type)。
       如果lv_calculation_date = get_first_day_of_month(iv_month = iv_month
                                                        iv_year = iv_year)。
         出口。
       万一。
       lv_calculation_date = lv_calculation_date-1。


     ENDDO。
   终结法。


   方法get_last_day_of_month。
     DATA(lv_month)= COND月(当iv_month = 12 THEN 01时
                                  ELSE iv_month +1)。
     DATA(lv_year)= COND gjahr(lv_month = 01 THEN iv_year + 1
                                  ELSE iv_year)。
     rv_last_day + 0(4)= lv_year。
     rv_last_day + 4(2)= lv_month。
     rv_last_day + 6(2)='01'。
     rv_last_day = rv_last_day-1。
   终结法。


   方法is_date_a_day_type。
     rv_success = COND#(当iv_day_type =(iv_date MOD 7)时然后abap_true
                          否则abap_false)。
   终结法。


   方法get_first_day_of_month。
     rv_first_day + 0(4)= iv_year。
     rv_first_day + 4(2)= iv_month。
     rv_first_day + 6(2)='01'。
   终结法。


 ENDCLASS。








 类别ltc_day定义
       用于检测
       危险等级危害
       最后。
   专用部分。
     方法it_returns_correct_nb_day_type进行测试。
 ENDCLASS。


 类别ltc_day实施。


   方法it_returns_correct_nb_day_type。
     cl_abap_unit_assert => assert_equals(
       行为=新的lc_day()-> get_numb_of_day_type_for_month(iv_month ='01'
                                                            iv_year ='2019'
                                                            iv_day_type = lc_day => gc_day_type-monday)
       exp ='04'
       msg ="它应在2019年1月回复04")。
     cl_abap_unit_assert => assert_equals(
       行为=新的lc_day()-> get_numb_of_day_type_for_month(iv_month ='12'
                                                            iv_year ='2019'
                                                            iv_day_type = lc_day => gc_day_type-monday)
       exp ='05'
       msg ="它应在2019年1月回复05")。


   终结法。






 ENDCLASS。










 选择开始。
   DATA(lo_month)= NEW lc_month('E')。
   DATA(lo_day)= NEW lc_day()。
   写/1 lo_day-> get_numb_of_day_type_for_month(iv_month = lo_month-> convert_month_from_string(CONV string(p_month))
                                                    iv_year = p_year
                                                    iv_day_type = lc_day => gc_day_type-monday)。


 选择结束。
 

一周热门 更多>