fastjson如何处理日期

本文详细介绍FastJSON处理日期的多种方式,包括使用特定日期格式进行序列化、反序列化,以及全局修改日期格式的方法。适用于Java后端开发人员,提高JSON处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fastjson如何处理日期

fastjson处理日期的API很简单,例如:

JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS")

使用ISO-8601日期格式

JSON.toJSONString(obj, SerializerFeature.UseISO8601DateFormat);

全局修改日期格式

JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

反序列化能够自动识别如下日期格式:

  • ISO-8601日期格式
  • yyyy-MM-dd
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd HH:mm:ss.SSS
  • 毫秒数字
  • 毫秒数字字符串
  • .NET JSON日期格式
  • new Date(198293238)

-------------------------------------------------------------------------------------------------------------------------------------------------------

例子:

后台

private void QueryAll(HttpServletRequest request, HttpServletResponse response) throws IOException {
        List<Note> list=biz.queryAll();
        //String str=JSON.toJSONString(list);
        String str = JSON.toJSONStringWithDateFormat(list, "yyyy-MM-dd HH:mm:ss", new SerializerFeature[0]);//
        System.out.println(str);
        PrintWriter out=response.getWriter();
        out.print(str);
        out.flush();
        out.close();
        
    }

前台

function initNoteList(){
            $('#tblNote').datagrid({
                url:'http://localhost:8081/EasyuiDemo/NoteController/QueryAll',
                pagination:true,
                pageSize:4,
                pageList:[4,8,12],
                pageNumber:1,
                toolbar:'#barNote',
                rownumbers:true,
                columns:[[
                    {field:'fillInTime',title:'填表时间',width:130},
                    {field:'cardNumber',title:'卡号',width:100},
                    {field:'employeeName',title:'申请人',width:100},
                    {field:'typeName',title:'请假类型',width:100},
                    {field:'startDate',title:'起始时间',width:130},
                    {field:'endDate',title:'结束时间',width:130},
                    {field:'operatorName',title:'代理人',width:100},
                    {field:'opt',title:'操作',width:150,
                        formatter:function(value,row,index){
                            var a='<a href="#" id="editButton" onclick="edit('+row.noteId+')">编辑</a>&nbsp';
                            var b='<a href="#" id="delButton" onclick="del('+row.noteId+')">删除</a>&nbsp';
                            var c='<a href="#" id="viewButton" onclick="view('+row.noteId+')">查看</a>&nbsp';
                            return c+a+b;
                        }    
                    }
                ]]
            });
        }

-------------------------------------------------------------------------------------------------------------------------------------------------

// rs 是对象,只要里面有日期类型,就可以自动转换格式
JSON.toJSONStringWithDateFormat(rs, "yyyy-MM-dd hh:mm:ss", SerializerFeature.WriteDateUseDateFormat);
//参考
json = JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm:ss", new SerializerFeature[0]);
--------------------- 
作者:居十四 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq_34120430/article/details/84862595 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>好的,用户想了解如何在Fastjson中进行全局日期格式的设置。首先,我需要回忆一下Fastjson的相关配置方法。记得Fastjson有一个全局设置,可以通过JSONObject.DEFFAULT_DATE_FORMAT来指定默认的日期格式。用户提供的引用[1]中也提到了这一点,设置这个静态属性即可,比如"yyyy-MM-dd"。 接下来,用户可能还会关心如何确保所有日期字段都使用这个格式,而无需逐个字段指定。引用[2]提到,使用全局配置后,内层的日期类型会被自动检测并格式化,这样可以提高效率。这应该就是用户需要的批量处理方法。 另外,用户提供的引用[3]展示了Fastjson内部如何获取日期格式,当dateFormatPattern不为空时,会创建SimpleDateFormat实例。这说明全局配置的dateFormatPattern会被各个序列化过程调用,确保一致性。 可能需要进一步解释代码示例,比如如何在main方法中设置,或者配置类中的初始化步骤。同时,提醒用户注意线程安全问题,虽然SimpleDateFormat本身不是线程安全的,但Fastjson内部可能有处理机制,或者建议在每次使用时创建实例? 最后,用户可能需要知道不同场景下的应用,比如如何针对特定字段自定义格式,而覆盖全局设置。这时候可以提到使用@JSONField注解来指定个别字段的格式,这样全局和局部配置可以结合使用。 总结步骤:设置静态属性、代码示例、注意事项、局部覆盖方法。确保回答结构清晰,步骤明确,引用提供的资料来增强可信度。</think>在Fastjson中进行全局日期格式设置可通过以下步骤实现: ### 一、设置全局日期格式 1. **配置静态属性** 通过设置`JSONObject.DEFFAULT_DATE_FORMAT`静态属性,定义全局默认日期格式: ```java JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; // 设置统一日期格式 ``` 此配置会对所有未单独指定格式的`Date`类型字段生效[^1]。 2. **代码初始化位置** 建议在应用启动时(如`main`方法或配置类中)设置该参数: ```java public class Application { public static void main(String[] args) { JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd"; // 其他启动代码... } } ``` ### 二、批量格式化机制 Fastjson通过类型检测自动识别`Date`类型字段,并应用全局格式: - 内层嵌套的`Date`字段会被递归检测 - 序列化效率高于逐个字段单独配置[^2] ### 三、底层实现原理 在序列化过程中,Fastjson通过`getDateFormat()`方法获取格式实例: ```java public DateFormat getDateFormat() { if (dateFormat == null && dateFormatPattern != null) { dateFormat = new SimpleDateFormat(dateFormatPattern, locale); } return dateFormat; } ``` 全局配置的`dateFormatPattern`会注入到该逻辑中[^3]。 ### 四、注意事项 1. **线程安全问题** - `SimpleDateFormat`非线程安全 - Fastjson通过每次序列化创建新实例规避该问题 2. **局部覆盖配置** 对特殊字段可使用`@JSONField`注解单独指定格式: ```java @JSONField(format = "MM/dd/yyyy") private Date birthDate; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值