fastjson按指定格式反向序列化出时间

周顺平 发布于 2013/05/21 17:06
阅读 7K+
收藏 1

@wenshao 你好,想跟你请教个问题:

现在使用fastjson序列化的时候用函数 JSON.toJSONStringWithDateFormat可以指定日期类型的格式化方式(

 JSON.toJSONStringWithDateFormat(group, "yyyyMMddHHmmssSSS", SerializerFeature.WriteDateUseDateFormat) ) ,但是我却找不到按指定时间格式的反向序列化的函数呢,除了改为按默认时间格式,或者我自己格式化字符串,fastjson有没有跟正向序列化类似的反向序列化方法呢.

加载中
0
e
eaglebette

请看fastjson源码,value到date的转换的源码是这样:

public static final Date castToDate(Object value) {
        if (value == null) {
            return null;
        }

        if (value instanceof Calendar) {
            return ((Calendar) value).getTime();
        }

        if (value instanceof Date) {
            return (Date) value;
        }

        long longValue = -1;

        if (value instanceof Number) {
            longValue = ((Number) value).longValue();
        }

        if (value instanceof String) {
            String strVal = (String) value;

            if (strVal.indexOf('-') != -1) {
                String format;
                if (strVal.length() == JSON.DEFFAULT_DATE_FORMAT.length()) {
                    format = JSON.DEFFAULT_DATE_FORMAT;
                } else if (strVal.length() == 10) {
                    format = "yyyy-MM-dd";
                } else if (strVal.length() == "yyyy-MM-dd HH:mm:ss".length()) {
                    format = "yyyy-MM-dd HH:mm:ss";
                } else {
                    format = "yyyy-MM-dd HH:mm:ss.SSS";
                }

                SimpleDateFormat dateFormat = new SimpleDateFormat(format);
                try {
                    return (Date) dateFormat.parse(strVal);
                } catch (ParseException e) {
                    throw new JSONException("can not cast to Date, value : " + strVal);
                }
            }

            if (strVal.length() == 0) {
                return null;
            }

            longValue = Long.parseLong(strVal);
        }

        if (longValue < 0) {
            throw new JSONException("can not cast to Date, value : " + value);
        }

        return new Date(longValue);
    }

0
becke
becke
这么处理是不是有点2
0
迷你苑
迷你苑
我也遇到这个问题了
返回顶部
顶部