package com.jsoniter.extra; import com.jsoniter.spi.JsonException; import com.jsoniter.JsonIterator; import com.jsoniter.any.Any; import com.jsoniter.output.JsonStream; import com.jsoniter.spi.Decoder; import com.jsoniter.spi.Encoder; import com.jsoniter.spi.JsoniterSpi; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * there is no official way to encode/decode datetime, this is just an option for you */ public class JdkDatetimeSupport { private static String pattern; private final static ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat(pattern); } }; public static synchronized void enable(String pattern) { if (JdkDatetimeSupport.pattern != null) { throw new JsonException("JdkDatetimeSupport.enable can only be called once"); } JdkDatetimeSupport.pattern = pattern; JsoniterSpi.registerTypeEncoder(Date.class, new Encoder() { @Override public void encode(Object obj, JsonStream stream) throws IOException { stream.writeVal(sdf.get().format(obj)); } @Override public Any wrap(Object obj) { return Any.wrap(sdf.get().format(obj)); } }); JsoniterSpi.registerTypeDecoder(Date.class, new Decoder() { @Override public Object decode(JsonIterator iter) throws IOException { try { return sdf.get().parse(iter.readString()); } catch (ParseException e) { throw new JsonException(e); } } }); } }