2020-09-01 05:01发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨!
我有一个字符串,用户可以自己输入。如何查找每个月的所有星期天? 没有不同的功能和FM。 以及如何将字符串转换为日期?
我很乐意提供帮助
对不起,我不明白您需要什么,为什么不能使用FM
关于ABAP中的转换问题,日期(DATS)内部是一个字符长度8(外部是一个字符( 10)),因此您只需要将格式YYYYMMDD的值传递到DATS数据类型,就无需转换。
最佳问候
您好Linda Yan ,
请明确说明您的要求,输入的内容和含义是什么
嗨琳达,
您可以使用上述Rodrigo建议的方法将字符串转换为DATE。
然后,您可以 将该日期传递给FM DATE_TO_DAY以获取日期。 第1天-星期一2-星期二,依此类推。 根据日期,添加天数以获取星期日的日期,然后继续添加7天以获取所有星期日的日期。
希望这会有所帮助。
注意事项
GK
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
月份名称-> T015M
( 避免出现问题,请大写翻译)
在您的要求中,您缺少年份,用户应如何输入年份?
要确定日期:日期MOD 7
1->星期一...
要计数
标识下个月的第一天,例如Date + 0(4)&&(Date + 4( 2)+ 1)&& 01
删除1直到月份更改(或日期= 01)
并进行MOD以确定是否为周日
这是我对练习代码的建议
参数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)。 选择结束。
最多设置5个标签!
对不起,我不明白您需要什么,为什么不能使用FM
关于ABAP中的转换问题,日期(DATS)内部是一个字符长度8(外部是一个字符( 10)),因此您只需要将格式YYYYMMDD的值传递到DATS数据类型,就无需转换。
最佳问候
您好Linda Yan ,
请明确说明您的要求,输入的内容和含义是什么
嗨琳达,
您可以使用上述Rodrigo建议的方法将字符串转换为DATE。
然后,您可以 将该日期传递给FM DATE_TO_DAY以获取日期。 第1天-星期一2-星期二,依此类推。 根据日期,添加天数以获取星期日的日期,然后继续添加7天以获取所有星期日的日期。
希望这会有所帮助。
注意事项
GK
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
月份名称-> T015M
( 避免出现问题,请大写翻译)
在您的要求中,您缺少年份,用户应如何输入年份?
要确定日期:日期MOD 7
1->星期一...
要计数
标识下个月的第一天,例如Date + 0(4)&&(Date + 4( 2)+ 1)&& 01
删除1直到月份更改(或日期= 01)
并进行MOD以确定是否为周日
# p#这是我对练习代码的建议
一周热门 更多>