Fastjson2 如何格式化日期

fastjson2 中,格式化日期非常灵活,既可以通过注解针对特定字段配置,也可以通过全局参数统一配置。以下是三种最常用的方式:

1. 使用 @JSONField 注解(推荐)

如果你只想对某个 Java Bean 中的特定日期字段进行格式化,这是最精准的方法。

public User {
    public Long;

    // 直接指定格式化模板
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    public LocalDateTime createTime;

    @JSONField(format = "yyyy-MM-dd")
    public Date birthday;
} 

2. 在序列化时动态指定(代码控制)

如果你不想在 Model 类上写死格式,可以在调用 toJSONString 时通过 JSONWriter.Context 或者直接传入格式化字符串。

User user = new User();
user.createTime = LocalDateTime.now();

// 直接传入日期 format 字符串
String json = JSON.toJSONString(user, "yyyy-MM-dd HH:mm:ss"); 
以下是常用日期格式:
需求场景推荐格式示例
REST APIyyyy-MM-dd'T'HH:mm:ssXXX2026-05-06T14:30:25+08:00
数据库存储yyyy-MM-dd HH:mm:ss2026-05-06 14:30:25
前端表格yyyy-MM-dd2026-05-06
详情页展示yyyy年MM月dd日 HH:mm2026年05月06日 14:30
日志文件名yyyyMMdd_HHmmss20260506_143025
性能测试HH:mm:ss.SSS14:30:25.123

3. Spring Boot 全局配置

如果你在 Spring Boot 中集成 Fastjson2,可以在消息转换器中统一设置日期格式,这样接口返回的所有日期都会遵循该格式。

@Configuration
public FastJsonConfiguration {
    @Bean
    public FastJsonConfig fastJsonConfig() {
        FastJsonConfig config = new FastJsonConfig();
        // 设置全局日期格式
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        return config;
    }
} 

特别注意:常见日期类型的处理

类型默认行为推荐处理方式
java.util.Date 默认输出毫秒时间戳使用 format 属性
LocalDateTime 默认 ISO 格式 (T 分隔)使用 format 属性
Unix 时间戳 默认不开启需配置 JSONWriter.Feature.WriteMillisAsTimestamps

提示:
如果你的项目涉及多线程环境,fastjson2 的日期格式化是线程安全的(基于新的 Java 8 Time API 实现),这比 Fastjson 1.x 中基于 SimpleDateFormat 的实现要可靠得多。