如何在Progress ABL中读取DD-MON-YY格式生日并转为DD/MM/YYYY?
解决Progress OpenEdge中非默认日期格式转DD/MM/YYYY的问题
你的核心问题是没区分字符串转日期和日期显示格式的处理逻辑,直接硬编码日期字面量的写法没法适配从文件读取的字符串数据,下面是正确的实现方案:
关键要点
- 从文件读取的日期是字符串类型,必须先通过指定输入格式将其转换为DATE类型变量
INPUT FORMAT用于定义字符串转日期时的解析规则,FORMAT用于控制日期的显示格式
正确代码示例
DEFINE VARIABLE cBirthStr AS CHARACTER NO-UNDO. // 存储从文件读取的日期字符串 DEFINE VARIABLE dBirthday AS DATE NO-UNDO. -- 模拟读取文件中的日期值 cBirthStr = "2-Aug-83". -- 按指定格式解析字符串为DATE类型 dBirthday = DATE(cBirthStr) INPUT FORMAT "DD-MON-YY". -- 以DD/MM/YYYY格式显示 DISPLAY dBirthday FORMAT "DD/MM/YYYY". -- 测试另一个日期 cBirthStr = "11-Jun-03". dBirthday = DATE(cBirthStr) INPUT FORMAT "DD-MON-YY". DISPLAY dBirthday FORMAT "DD/MM/YYYY".
日期掩码说明
DD:两位数字的日期(比如02、11)MON:三位英文月份缩写(不区分大小写,Aug、JUN都能识别)YY:两位年份,Progress会根据系统默认的YEAR OFFSET自动补全世纪(默认规则是:若两位年份大于等于当前年份减50,则归为当前世纪;否则归为上一世纪,比如83→1983,03→2003)
如果你的日期字符串是其他变种(比如月份全拼、分隔符不同),只需要调整INPUT FORMAT的掩码即可,比如月份全拼用DD-MMMM-YY,分隔符是点的话用DD.MON.YY。
内容的提问来源于stack exchange,提问作者Felice
相关产品推荐
相关产品推荐

