Gson是Java中一個(gè)很方便的JSON庫(kù),可以方便地將POJO對(duì)象轉(zhuǎn)換成JSON字符串,也可以將JSON字符串轉(zhuǎn)換成Java對(duì)象。然而,有時(shí)候在轉(zhuǎn)換日期時(shí),會(huì)遇到一個(gè)問題,就是日期的值在轉(zhuǎn)換成JSON或者從JSON中轉(zhuǎn)換回Java對(duì)象時(shí)會(huì)變成空白。
Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss") .create();
以上代碼是設(shè)置Gson轉(zhuǎn)換日期的格式為"yyyy-MM-dd'T'HH:mm:ss",可以根據(jù)需要進(jìn)行修改。在我們轉(zhuǎn)換日期時(shí),只需要傳入這個(gè)Gson對(duì)象即可:
String json = gson.toJson(myObjectWithDate); MyObjectWithDate obj = gson.fromJson(json, MyObjectWithDate.class);
然而,有時(shí)候我們會(huì)發(fā)現(xiàn)從JSON中解析出來的日期為null,這是因?yàn)镴ava中日期類型的默認(rèn)值為null,而在Gson中,null會(huì)被轉(zhuǎn)換成JSON的null。為了解決這個(gè)問題,我們可以使用一個(gè)特殊的日期類型Adapter來處理這種情況:
public class DateTypeAdapter extends TypeAdapter{ @Override public void write(JsonWriter out, Date value) throws IOException { if (value == null) { out.nullValue(); } else { out.value(value.getTime()); } } @Override public Date read(JsonReader in) throws IOException { long time = in.nextLong(); return new Date(time); } } // 使用方式 Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new DateTypeAdapter()) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss") .create();
以上代碼中,DateTypeAdapter將日期的值轉(zhuǎn)換成時(shí)間戳,并在解析時(shí)將時(shí)間戳轉(zhuǎn)換回日期對(duì)象。通過這種方式,我們就可以正確地從JSON中解析出日期了。