【问题标题】:RestSharp changes timezone on serializationRestSharp 更改序列化时区
【发布时间】:2016-01-30 16:23:30
【问题描述】:

RestSharp 在序列化期间更改我的日期时间对象的时区。例如,当我调试时,原始日期时间对象是 2015-01-02 00:00:00,但是当 RestSharp 对其进行序列化并使用 request.AddBody(object) 将其添加到我的请求中时,有效负载已将日期变为 2015-01-01T22:00:00Z。因此,它在 2 小时内及时将其转换回来。

我目前在瑞典,那里是 GMT+2:00,所以我猜它会默认为 GMT+0?

更新

我从客户那里得到一个String 形式的日期,例如"2015-01-02"。 然后我尝试在以下代码中将其解析为DateTime-object:

if (!string.IsNullOrEmpty(fieldData) && DateTime.TryParse(fieldData, out dateTime)){ 
    budgetUtokad.SlutDatum = dateTime;
}

我需要在这里以某种方式指定Utc

【问题讨论】:

  • 2015-01-02:00:00 到底是什么意思?这是一种非常奇怪的格式,目前还不清楚它的含义。你能提供一个简短但完整的例子吗?
  • 我已经编辑了这个问题,所以现在可能更容易理解了。
  • 一点点 - 但你的 2015-01-02 00:00:00 值没有任何时区,所以它有点浮动。这并不代表特定的时间点。听起来 RestSharp 将其解释为“您当地时区的那个时间”,这并非完全不合理。
  • 那么,为了使这项工作按我的意愿正常工作,我必须以某种方式指定 DateTime 对象的时区?
  • 这取决于你想要达到的目标,基本上。我们仍然不知道您真正试图代表什么价值。

标签: c# .net serialization timezone restsharp


【解决方案1】:

如果你很高兴得到“给定日期开始时的午夜,UTC 时间”,你可以使用:

if (!string.IsNullOrEmpty(fieldData) && 
    DateTime.TryParseExact(
        fieldData,
        "yyyy-MM-dd",
        CultureInfo.InvariantCulture,
        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
        out dateTime)) { 
    budgetUtokad.SlutDatum = dateTime;
}

那时已经是 UTC,所以 RestSharp 将输出为“2015-01-02T00:00:00Z”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多