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

使用iTextPDF填充PDF表单时如何格式化日期时间值

日期时间格式转换实现方案

实现逻辑

在JSON值写入PDF表单前,通过字段后缀判断字段类型,对日期、时间值做对应格式转换后再赋值即可,不需要调整现有Acrobat表单的配置。

代码修改步骤

  1. 先全局定义线程安全的格式化器,使用Java 8+自带的java.time包实现,避免老版SimpleDateFormat的线程安全问题:
// JSON输入的日期格式:yyyy-MM-dd
private static final DateTimeFormatter INPUT_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// PDF输出的日期格式:MM/dd/yyyy
private static final DateTimeFormatter OUTPUT_DATE_FORMAT = DateTimeFormatter.ofPattern("MM/dd/yyyy");
// JSON输入的时间格式:24小时制 HH:mm
private static final DateTimeFormatter INPUT_TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm");
// PDF输出的时间格式:12小时制 hh:mm a(a对应AM/PM标识)
private static final DateTimeFormatter OUTPUT_TIME_FORMAT = DateTimeFormatter.ofPattern("hh:mm a", Locale.US);
  1. 调整原有遍历赋值的逻辑,增加格式转换判断:
for(Map.Entry<String,String> entry : jsonMap.entrySet()){           
    if(fields.containsKey(entry.getKey())) {
        logger.debug(entry.getValue());
        String fieldName = entry.getKey();
        String originalValue = entry.getValue();
        if(originalValue.contains("data:image/png;base64")) {
            logger.debug("found an image!");
            fields.get(fieldName).setValue(originalValue.split(",")[1]);
        } else {
            String convertedValue = originalValue;
            try {
                // 按字段后缀判断类型做转换
                if(fieldName.endsWith("_Date")) {
                    LocalDate date = LocalDate.parse(originalValue, INPUT_DATE_FORMAT);
                    convertedValue = OUTPUT_DATE_FORMAT.format(date);
                } else if(fieldName.endsWith("_Time")) {
                    LocalTime time = LocalTime.parse(originalValue, INPUT_TIME_FORMAT);
                    convertedValue = OUTPUT_TIME_FORMAT.format(time);
                }
            } catch (DateTimeParseException e) {
                // 格式解析失败时保留原始值,避免阻断整个生成流程
                logger.warn("字段{}的取值{}格式解析失败,使用原始值", fieldName, originalValue, e);
            }
            fields.get(fieldName).setValue(convertedValue);
        }
    }
}

可选调整

  • 如果不需要显示AM/PM标识,把时间输出格式的 a参数删除即可
  • 如果字段没有统一的_Date/_Time后缀,你可以提前维护两个集合分别存储所有日期字段名、时间字段名,转换前判断当前字段属于哪个集合即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:04