如何将DD-MMM-YYYY HH:MM:SS.SSS格式转换为Progress DATETIME-TZ?
更简便的Progress ABL日期时间转换方法
嘿,完全理解你不想靠拆分字段这种繁琐办法来转换日期时间格式——确实有更简洁的方式搞定这个需求!下面直接给你一步到位的解决方案:
核心思路
利用Progress ABL的PARSE函数直接解析原始字符串为DATETIME类型,再转换为DATETIME-TZ,最后按需格式化输出。不用手动拆分日、月、年这些字段,代码更简洁易维护。
完整代码示例
DEFINE VARIABLE cInputStr AS CHARACTER NO-UNDO INITIAL "15-Sep-2017 20:51:14.566". DEFINE VARIABLE dtParsed AS DATETIME NO-UNDO. DEFINE VARIABLE dttzFinal AS DATETIME-TZ NO-UNDO. // 1. 解析原始字符串为DATETIME类型 dtParsed = PARSE(cInputStr, "DD-MMM-YYYY HH:MM:SS.SSS"). // 2. 转换为DATETIME-TZ,这里以UTC时区为例,可替换为你需要的时区(比如SESSION:TIMEZONE或"+08:00") dttzFinal = DATETIME-TZ(dtParsed, TIMEZONE("UTC")). // 3. 输出为你指定格式的字符串(如果需要的话) MESSAGE "转换结果:" STRING(dttzFinal, "99/99/9999 HH:MM:SS.SSS+HH:MM") VIEW-AS ALERT-BOX INFORMATION.
关键细节说明
- PARSE函数:直接匹配原始字符串的格式掩码
"DD-MMM-YYYY HH:MM:SS.SSS",自动完成字符串到DATETIME的转换,省去手动拆分的麻烦。 - 时区指定:转换为
DATETIME-TZ时必须明确时区,示例中用TIMEZONE("UTC")指定UTC时区,你可以根据业务需求替换:- 使用本地时区:
SESSION:TIMEZONE - 使用具体时区标识:
TIMEZONE("EST")或TIMEZONE("+08:00")
- 使用本地时区:
- 格式化输出:如果需要把
DATETIME-TZ变量转换成你要的字符串格式,用STRING函数加上掩码"99/99/9999 HH:MM:SS.SSS+HH:MM"即可。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

