fastjson格式化时间
时间: 2023-05-28 21:03:17 浏览: 163
Fastjson可以通过自定义序列化器和反序列化器来格式化时间。
1. 自定义序列化器
在序列化时,我们可以通过实现`SerializeFilter`接口的`beforeSerialize`方法,将`java.util.Date`类型的时间转换为指定格式的字符串。
```
public class DateSerializeFilter implements SerializeFilter {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
@Override
public Object process(Object object, String name, Object value) {
if (value instanceof Date) {
return new SimpleDateFormat(DATE_FORMAT).format(value);
}
return value;
}
}
```
然后在序列化时,使用自定义的序列化器即可:
```
String jsonString = JSON.toJSONString(object, new DateSerializeFilter());
```
2. 自定义反序列化器
在反序列化时,我们可以通过实现`ObjectDeserializer`接口的`deserialze`方法,将指定格式的字符串转换为`java.util.Date`类型的时间。
```
public class DateDeserializer implements ObjectDeserializer {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
@Override
public Date deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
String dateStr = parser.parseObject(String.class);
try {
return new SimpleDateFormat(DATE_FORMAT).parse(dateStr);
} catch (ParseException e) {
throw new JSONException("parse date error: " + dateStr, e);
}
}
@Override
public int getFastMatchToken() {
return JSONToken.LITERAL_STRING;
}
}
```
然后在反序列化时,使用自定义的反序列化器即可:
```
String jsonString = "{\"date\":\"2021-09-28 10:10:10\"}";
JSONObject jsonObject = JSON.parseObject(jsonString);
ObjectDeserializer dateDeserializer = new DateDeserializer();
JSONScanner scanner = new JSONScanner(jsonObject.getString("date"));
scanner.scanString();
Date date = dateDeserializer.deserialze(null, null, null);
```
注意:在使用自定义的反序列化器时,需要手动解析JSON字符串中的时间字符串,并且调用`deserialze`方法将时间字符串转换为`java.util.Date`类型的时间。