[ABAP]如何计算除中断时间以外的两个时间戳之间的差异

2020-09-22 09:31发布

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

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


ABAP专家,

有一个特殊要求,下图显示了班级时间表表,班级开始时间(ZAACH1381)和班级结束时间(ZAACH1382)存储在时间戳中,将有两个输入参数:学生加入时间和离开时间(以时间戳格式) 此外,还需要输出学生参加的总时间 (休息时间除外) (以秒为单位)。

PS。 学生可以在休息时间参加,也可以在休息时间离开。

让我们以此为例:

该学生加入20150408084000,然后离开201504081005,因此输出应为:

[20150408100500和20150408084000之间的间隔]-[20150408101000和20150408100500之间的间隔是休息时间]

= 5,100秒-300秒

= 4,800秒

如何实现这种复杂的情况?

百万感谢,

加兰(Galland)

(6.4 kB)

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

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


ABAP专家,

有一个特殊要求,下图显示了班级时间表表,班级开始时间(ZAACH1381)和班级结束时间(ZAACH1382)存储在时间戳中,将有两个输入参数:学生加入时间和离开时间(以时间戳格式) 此外,还需要输出学生参加的总时间 (休息时间除外) (以秒为单位)。

PS。 学生可以在休息时间参加,也可以在休息时间离开。

让我们以此为例:

该学生加入20150408084000,然后离开201504081005,因此输出应为:

[20150408100500和20150408084000之间的间隔]-[20150408101000和20150408100500之间的间隔是休息时间]

= 5,100秒-300秒

= 4,800秒

如何实现这种复杂的情况?

百万感谢,

加兰(Galland)

(6.4 kB)
付费偷看设置
发送
5条回答
木偶小白
1楼-- · 2020-09-22 10:16
Violet凡
2楼-- · 2020-09-22 10:18

您知道,如果您将示例简化为仅使用日期和日期而不是时间戳记,那么人们会更容易理解。 解决方案的逻辑是相同的-只是不同的数据类型-因此您可以轻松地将其应用于时间戳的实际需求。

很难读取14位数字。 您所写的事实证明:该学生加入20150408084000,然后离开 201504081005 您的上一个时间戳只有12位数字。

请使用更易读的数据类型,用一个简单的示例来评论您的问题。 这样可以使人们更轻松地为您提供帮助,因此您更有可能获得解决方案。

Haoba3210
3楼-- · 2020-09-22 10:05

嗨Golland,

这里的实际问题是什么? 如果要减去两个时间戳,则可以使用ABAP类cl_abap_tstmp进行各种时间戳操作。 以下是一个减去值的示例,该差值以秒为单位返回。

数据:r_secs类型TZNTSTMPL。

 呼叫方法cl_abap_tstmp =>减

   出口

     tstmp1 = tstmp1

     tstmp2 = tstmp2

   接收

     r_secs = r_secs

     。



  捕获cx_parameter_invalid_range。

    "此处的相关错误处理代码

  捕获cx_parameter_invalid_type。

    "此处的相关错误处理代码

 ENDTRY。

 
四川大学会员
4楼-- · 2020-09-22 10:21

嗨Galland Peng,

正如 Matthew Billingham 所述,我只是简单地使用SY-UZEIT而不是时间戳进行解释。 请在下面找到逻辑。 如果需要TIMESTAMP,则相应地转换逻辑。

选择项:s_time FOR l_time缺省'084000'至'100500'。
选择项:s_break FOR l_time缺省'090000'至'091000'。
数据:l_calc_time TYPE sy-uzeit。< br> IF s_time-low LE s_break-high和s_time-high GE s_break-low。
IF s_break-low IN s_time。
l_calc_time = s_break-low-s_time-low。
ENDIF。
如果s_break-high IN s_time。
l_calc_time = l_calc_time + s_time-high-s_break-high。
ENDIF。
ENDIF。
WRITE L_CALC_TIME。
Climb_Ma
5楼-- · 2020-09-22 10:09

查找 任何特定的键字段,以确定休息时间和上课时间。

以便您可以获得我希望的解决方案!

一周热门 更多>