首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MVC中,使用Json调用具有时间格式属性的对象,如何避免自动缩减8小时?

在MVC中,使用Json调用具有时间格式属性的对象,如何避免自动缩减8小时?
EN

Stack Overflow用户
提问于 2013-05-26 15:28:23
回答 2查看 282关注 0票数 1

一个学生类有一个叫做生日的属性。我的web服务器在北京(UTC+8),当我从服务器获取JSON格式的数据时,生日属性总是将8小时减少到原来的日期,我该如何纠正?我也在北京,我为所有的生日属性添加了8个小时,但如果我在另一个时区,或者web服务器不在北京,那么我必须手动添加其他小时。

在web服务器上,以下是我的代码:

代码语言:javascript
运行
复制
    return Json(student);

获取数据的代码:

代码语言:javascript
运行
复制
  var studentReader= new StreamReader(Request.InputStream);
  var student= JsonHelper.FromJson<Student>(studentReader.ReadToEnd());

JsonHelper类:

代码语言:javascript
运行
复制
   public static T FromJson<T>(this string json)
    {
     return JsonConvert.DeserializeObject<T>(json);
    }
EN

回答 2

Stack Overflow用户

发布于 2013-05-26 16:33:29

建议您以UTC格式存储所有日期时间值。在客户端代码中,您可以将其转换为所需的任何时区。

票数 1
EN

Stack Overflow用户

发布于 2013-05-26 23:54:57

您的JSON序列化很好。这没什么问题。

您需要确保将所有日期-时间值存储为UTC。当您显示日期时,您可以将其转换为所需的时区。

我通常是这样做的:

  • 每次存储DateTime时,我都会使用DateTime.ToUniversalTime()来确保日期存储在数据库上的UTC上。
  • 当我需要在视图中打印日期时,我使用了一个方法,该方法采用特定的TimeZone并转换日期。有关代码示例,请参阅以下内容。
  • 我从不依赖客户端区域。如果我有来自许多地理位置的广泛用户,那么我只需要选择他们喜欢的时区,并将这些信息存储在他们的个人资料中(Google、Microsoft和37Signals都为他们的web应用程序做了这一点,仅举几个例子)。

公共静态日期(此对象日期){ DateTime dt;if (!DateTime.TryParse(date.ToString(),out dt)返回DateTime.UtcNow;//时区字符串。这也可以存储在web.config //或用户配置文件中var timeZone =“太平洋SA标准时间”;var defaultTimeZone = var var userTime = TimeZoneInfo.ConvertTimeFromUtc(dt,defaultTimeZone);return userTime;}

有关前面问题herehere的更多信息

编辑: List of allowed Timezone strings here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16757073

复制
相关文章

相似问题

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