You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@CsvDate格式化SQL Timestamp写入CSV时上午时间格式异常求助

问题解决:SQL Timestamp写入CSV格式异常

问题原因

你遇到的格式不一致问题,核心是24小时制HH与12小时制标识a的混用冲突。OpenCSV的@CsvDate注解在解析这种混合格式时,上午时段(12点前)会触发内部的格式兼容逻辑,导致格式 fallback 为系统默认的短日期格式。

解决方案

1. 统一时间制格式

根据需求选择一种时间制,避免混合使用:

  • 若使用24小时制(无需AM/PM标识):
    @CsvDate("yyyy-MM-dd HH:mm:ss")
    private Timestamp inDate;
    
  • 若使用12小时制(保留AM/PM):将HH改为hh(12小时制小时字段):
    @CsvDate("yyyy-MM-dd hh:mm:ss a")
    private Timestamp inDate;
    

2. 强制指定Locale

系统默认Locale可能干扰日期格式化,在CSV写入配置中固定Locale:

StatefulBeanToCsvBuilder<T> builder = new StatefulBeanToCsvBuilder<>(writer)
        .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
        .withLocale(Locale.US)
        .build();

3. 自定义转换器兜底

如果上述方法无效,用自定义转换器完全控制格式化逻辑:

public class CustomTimestampConverter extends AbstractBeanField<Timestamp> {
    @Override
    protected String convert(Timestamp value) {
        if (value == null) {
            return "";
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a", Locale.US);
        return sdf.format(new Date(value.getTime()));
    }
}

然后在字段上替换注解:

@CsvCustomBindByName(converter = CustomTimestampConverter.class)
private Timestamp inDate;

内容的提问来源于stack exchange,提问作者KVK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:50:15