我得到了一个C# webapi项目,它返回实例foo的对象。
foo在c#中包含两个DateTime属性。我已经配置了我的webapi,使其在时间结束后总是在点后返回7位数字。因此,当对象被序列化为json时,如下所示:
{
"Timestamp": "2017-02-11T11:49:00.0000000",
"Changed": "2017-02-11T11:51:49.2620373"
}现在,我尝试用java反序列化对象。为此,我选择了gson。我像这样配置gson:
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").create();反序列化之后,java中的两个属性如下所示:
Sat Feb 11 11:49:00,这是正确的Sat Feb 11 12:35:29,这是错误的所以我的问题是,是否可以配置gson以实现七位数字的准确性,或者我应该删除其中的四位呢?
发布于 2017-03-10 23:35:52
为什么你会得到这样的时间:
Date中的json:2017-02-11T11:51:49.2620373假设2620373是毫秒,它的结果实际上是2620秒,即44分钟。
现在,如果在11:51:49中添加44分钟,就会得到12:35:29。默认情况下,GSON的解析比较宽松,这意味着它将增加时间/日,并调整更高的组件(例如,将32/03/2017解析为Date将导致01/04/2017)。
如果您想忽略毫秒,那么您可以将日期格式更改为yyyy-MM-dd'T'HH:mm:ss.,它将导致正确的日期,例如:
public static void main(String[] args) throws Exception{
Gson gson = new GsonBuilder().setLenient().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.").create();
Model model = gson.fromJson("{\"Timestamp\": \"2017-02-11T11:49:00.0000000\",\"Changed\": \"2017-02-11T11:51:49.2620373\"}", Model.class);
System.out.println(model.getTimestamp());
System.out.println(model.getChanged());
}
class Model{
private Date Timestamp;
private Date Changed;
public Date getTimestamp() {
return Timestamp;
}
public void setTimestamp(Date timestamp) {
Timestamp = timestamp;
}
public Date getChanged() {
return Changed;
}
public void setChanged(Date changed) {
Changed = changed;
}
}https://stackoverflow.com/questions/42729270
复制相似问题