无需调频即可工作

2020-09-01 05:01发布

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

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


嗨!

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

我很乐意提供帮助

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

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


嗨!

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

我很乐意提供帮助

付费偷看设置
发送
5条回答
微wx笑
1楼-- · 2020-09-01 05:52

对不起,我不明白您需要什么,为什么不能使用FM

关于ABAP中的转换问题,日期(DATS)内部是一个字符长度8(外部是一个字符( 10)),因此您只需要将格式YYYYMMDD的值传递到DATS数据类型,就无需转换。

最佳问候

木偶小白
2楼-- · 2020-09-01 05:59

您好Linda Yan

请明确说明您的要求,输入的内容和含义是什么

哎,真难
3楼-- · 2020-09-01 05:59

嗨琳达,

您可以使用上述Rodrigo建议的方法将字符串转换为DATE。

然后,您可以 将该日期传递给FM DATE_TO_DAY以获取日期。 第1天-星期一2-星期二,依此类推。 根据日期,添加天数以获取星期日的日期,然后继续添加7天以获取所有星期日的日期。

希望这会有所帮助。

注意事项

GK

一只江湖小虾
4楼-- · 2020-09-01 05:56

Satish Kumar Balasubramanian ,我有3个参数。如果在字段3中输入单词'date',则需要分析字段1。如果它以DD format.mm yyyy mm,假定第一个日期应指定一年中的第一个星期日,则显示给定月份所有星期日的日期。

示例:字段1 = 06.01.2019 03

字段3 =日期

结论:有必要显示2019年3月所有星期日的数量:03 10 17 24 31

compass1988
5楼-- · 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)。


 选择结束。
 

一周热门 更多>