首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与gson交换从c# webapi到java的日期

与gson交换从c# webapi到java的日期
EN

Stack Overflow用户
提问于 2017-03-10 23:13:18
回答 1查看 315关注 0票数 1

我得到了一个C# webapi项目,它返回实例foo的对象。

foo在c#中包含两个DateTime属性。我已经配置了我的webapi,使其在时间结束后总是在点后返回7位数字。因此,当对象被序列化为json时,如下所示:

代码语言:javascript
复制
{
  "Timestamp": "2017-02-11T11:49:00.0000000",
  "Changed": "2017-02-11T11:51:49.2620373"
}

现在,我尝试用java反序列化对象。为此,我选择了gson。我像这样配置gson

代码语言:javascript
复制
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以实现七位数字的准确性,或者我应该删除其中的四位呢?

EN

回答 1

Stack Overflow用户

发布于 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.,它将导致正确的日期,例如:

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42729270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档