Freemarker日期格式化遇解析异常及正则语法问题求助
问题排查与解决
1. 日期解析失败问题
你的日期字符串是标准ISO8601格式(带Z标识UTC时区),Freemarker默认的?datetime指令无法自动识别这种带Z的格式,需要显式指定解析格式才能正确转换。
修正后的代码:
content?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")?string['dd.MM.yyyy, HH:mm']
- 用
?datetime("格式")指定解析规则,把Z作为固定字符处理(用单引号包裹),确保Freemarker能正确识别整个日期字符串。 - 之后再用
?string['目标格式']转换成你需要的日期样式。
2. 正则表达式报错问题
错误原因:
- Freemarker的正则表达式引擎不支持
\d元字符,必须用[0-9]代替数字匹配。 - 你原正则里的
([+-][0-2][0-9]:[0-5][0-9]d|Z)多了一个多余的d,这会导致匹配逻辑错误,同时转义\d时会触发解析异常。
修正后的正则:
content?matches('[0-9]{4}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]([+-][0-2][0-9]:[0-5][0-9]|Z)')
- 去掉多余的
d,修正分组匹配逻辑。 - 全程用
[0-9]代替\d,避免Freemarker的解析转义问题。
内容的提问来源于stack exchange,提问作者user1182625
相关产品推荐
相关产品推荐

