如何用OpenCSV将ISO 8601格式字符串转为java.sql.Timestamp?
解决ISO 8601转java.sql.Timestamp的@CsvDate格式问题
正确的格式配置
针对你的输入2023-12-20T23:15:49.680Z,可以使用以下两种格式之一:
- 支持时区解析的写法:
@CsvDate(value = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
- 直接匹配字面量Z的写法:
@CsvDate(value = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
失败原因说明
你之前使用的yyyy-MM-dd'T'HH:mm:ss格式缺少两个关键部分:
- 原始字符串中的毫秒片段(.680),需要用
SSS来匹配 - 末尾的时区标识Z,要么用
X解析时区,要么用'Z'匹配字面量
异常提示的yyyy-MM-dd HH:mm:ss.fffffffff是java.sql.Timestamp默认的JDBC格式,但通过指定完全匹配输入的格式,就能让OpenCSV正确完成转换。
额外注意
如果输入字符串的毫秒位数不固定(比如有的是2位、3位甚至更多),可以调整格式中的毫秒部分:
- 用
SSS固定匹配3位毫秒 - 用
SSSSSS匹配微秒级精度(最多6位)
内容的提问来源于stack exchange,提问作者ABC123
相关产品推荐
相关产品推荐

