2020-08-15 20:06发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
ABSL中是否有标准功能可以将JSON毫秒日期(EPOCH日期)转换为日期时间?
谢谢
凯文
感谢Sneha,我认为这可能是ABAP而不是ABSL,但我们也许可以使用其中的一些代码来简化我们的代码...我们已经弄清楚了,不确定它是否以最佳方式运行,但是否可行。 我们创建了2个重用函数来转换毫秒之间的时间(Epoch Date)。
这是毫秒字符串的转换
导入BASIS.Global; var结果:GLOBAL_DateTime; var trimContent = Content.Substring(0,10); var trimContentHalfSec = Content.Substring(10); var trimContentHalfSecNumber = Library :: Numeric.ParseFromString(trimContentHalfSec); var aSec = 0; var ePValue = Library :: Numeric.ParseFromString(trimContent); var epochstart =" 19700101000000"; //var epochdate = Library :: DateTime.ParseFromString(epochstart); var epochdate = GlobalDateTime.ParseFromString(epochstart); //var epochstartJustDate = Library :: DateTime.ConvertToGlobalDateTime(epochdate); var epochstartJustDate = epochdate.ConvertToDate(); if(trimContentHalfSecNumber> 499){aSec = 1;} var min = ePValue/60; var sec =(ePValue%60)+ aSec; //第二个值 var secString = sec.ToString(); var minTrimmedDecimal = min.ToString()。TrimRight(" 1234567890"); var minTrimmDot = minTrimmedDecimal.TrimRight("。"); var hrs = Library :: Numeric.ParseFromString(minTrimmDot)/60; var minRemainder = Library :: Numeric.ParseFromString(minTrimmDot)%60; //分钟值 var minRemainderString = minRemainder.ToString(); var hrsTrimmedDecimal = hrs.ToString()。TrimRight(" 1234567890"); var hrsTrimmDot = hrsTrimmedDecimal.TrimRight("。"); var dys = Library :: Numeric.ParseFromString(hrsTrimmDot)/24; var hrsRemainder = Library :: Numeric.ParseFromString(hrsTrimmDot)%24; //小时值 var hrsRemainderString = hrsRemainder.ToString(); var dysTrimmedDecimal = dys.ToString()。TrimRight(" 1234567890"); var dysTrimmDot = dysTrimmedDecimal.TrimRight("。"); dys = Library :: Numeric.ParseFromString(dysTrimmDot); var duration =" P" + dys.ToString()+" D"; //var addDuration = epochstartJustDate.AddDuration(Library :: Duration.ParseFromString(duration)); var addDuration = epochstartJustDate.AddDuration(Library :: Duration.ParseFromString(duration)); var dateAsString = addDuration.ToString(); if(secString.Length()== 1){secString =" 0" + secString;} if(minRemainderString.Length()== 1){minRemainderString =" 0" + minRemainderString;} if(hrsRemainderString.Length()== 1){hrsRemainderString =" 0" + hrsRemainderString;} var ePochCalculatedString = dateAsString +" T" + hrsRemainderString +":" + minRemainderString +":" + secString +" Z"; var epochCalcDate = Library :: DateTime.ParseFromString(ePochCalculatedString); var ePochCalculatedDate = Library :: DateTime.ConvertToGlobalDateTime(epochCalcDate); 结果= ePochCalculatedDate; 返回结果;
您确定这是ABSL吗?
感谢Kevin为您提供的解决方案。
我的灵感来自于您的编码,并在某些时候对其进行了简化。 因此,我想与您分享。
这应该可以解决问题:
导入ABSL; 进口BASIS.Global; var result:DataType :: GLOBAL_DateTime; //获取时间戳并分隔秒 var trimContentSec = Content.Substring(0,10); var trimContentSecNumber = Library :: Numeric.ParseFromString(trimContentSec); //创建纪元开始 var epochstart =" 19700101000000"; var epochdate = GlobalDateTime.ParseFromString(epochstart); var epochstartJustDate = epochdate.ConvertToDate(); //将秒数添加到纪元开始处以获取可读的日期时间 var duration = Library :: Duration.Create(0,0,0,0,0,trimContentSecNumber); 结果= epochdate.AddDuration(duration); 返回结果;
嗨,凯文,
尝试:
参数:d2类型sy-datum默认值sy-datum,
d1 TYPE sy-datum默认值'yyyymmdd'。
数据sec_day TYPE i。 "每天毫秒
数据:d类型i。
数据结果类型f。
DATA rp(16)输入p个小数0。
在d2上的"选择屏幕"上。
IF d2 LE d1。
带有"日期必须大于yyyy/mm/dd"的e001(00)消息。
ENDIF。
开始选择。
sec_day = 24 * 60 * 60 * 1000。
d = d2-d1。
rp =结果= d *秒_天。
写:/d2,d1,d,/结果,rp。
希望有帮助
最多设置5个标签!
感谢Sneha,我认为这可能是ABAP而不是ABSL,但我们也许可以使用其中的一些代码来简化我们的代码...我们已经弄清楚了,不确定它是否以最佳方式运行,但是否可行。 我们创建了2个重用函数来转换毫秒之间的时间(Epoch Date)。
这是毫秒字符串的转换
您确定这是ABSL吗?
感谢Kevin为您提供的解决方案。
我的灵感来自于您的编码,并在某些时候对其进行了简化。 因此,我想与您分享。
这应该可以解决问题:
嗨,凯文,
尝试:
参数:d2类型sy-datum默认值sy-datum,
d1 TYPE sy-datum默认值'yyyymmdd'。
数据sec_day TYPE i。 "每天毫秒
数据:d类型i。
数据结果类型f。
DATA rp(16)输入p个小数0。
在d2上的"选择屏幕"上。
IF d2 LE d1。
带有"日期必须大于yyyy/mm/dd"的e001(00)消息。
ENDIF。
开始选择。
sec_day = 24 * 60 * 60 * 1000。
d = d2-d1。
rp =结果= d *秒_天。
写:/d2,d1,d,/结果,rp。
希望有帮助
一周热门 更多>