【问题标题】:C# show client local time instead of UTC time from databaseC# 显示客户端本地时间而不是数据库中的 UTC 时间
【发布时间】:2016-02-02 11:08:10
【问题描述】:

我正在使用 asp.net c#。当用户执行操作时,我使用 UTC 时间将操作日期时间保存在数据库中。现在是时候展示动作了,我用数据库中的日期时间向客户端发送 json。现在的问题是它以 UTC 时间出现,这真的让用户感到困惑。 我的问题有哪些可选解决方案?它们应该基于客户端还是基于服务器?

【问题讨论】:

  • 我们将需要重新创建:请 1. 使其最小化,2. 包括将时间发送到客户端的服务器端代码,以及 3. 客户端上与显示前的日期。
  • 还提供如何发送此 JSON 的信息。您使用 ASP.NET (MVC/WebAPI) 还是其他 Web 框架?
  • 这听起来根本不像 C# 问题 - 听起来像是表示逻辑问题。将 UTC 时间发送给客户端可能是正确的做法,然后您可以在 Javascript 中将其转换为客户端本地时间。

标签: c# json datetime utc


【解决方案1】:

我认为最正确的方法是继续以与您现在相同的方式(UTC)将数据发送到客户端,然后您将能够在演示期间将其转换为本地或任何其他时区,但在计算中继续使用 UTC(如果有)。

关于如何在 javascript 中执行此操作有多个问题,例如here

在将字符串转换为日期之前将“UTC”附加到字符串 javascript:

var date = new Date('6/29/2011 4:52:48 PM UTC');

date.toString() // “2011 年 6 月 29 日星期三 09:52:48 GMT-0700 (PDT)”

附:不确定您是否可以在 js 中执行各种时区,但至少它应该与本地时区一起使用

【讨论】:

    【解决方案2】:

    我在这里回答了这个确切的问题:

    How to get current user timezone in c#

    基本上,在您的数据库中,您应该以 UTC 格式存储时间。然后,您需要让 JavaScript 调用您的 WCF Web 服务,并将其传递给用户的本地时区。

    您的服务可以将此时区偏移量添加到 UTC 时间,并返回用户本地时间的日期时间。

    【讨论】:

      【解决方案3】:

      根据客户端的时区将UTC时间转换为本地时间。如果这是在服务器端或客户端完成,则是设计、逻辑/表示层分离的问题。

      如果您选择在服务器端进行,您将需要可用的客户端本地时区信息。鉴于此,您可以编写:

      TimeZoneInfo.ConvertTimeFromUtc(utcdate, clients_timezoneinfo)
      

      除了 c# 部分,客户端浏览器中的时区偏移也有很好的覆盖,例如get client time zone from browser

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-28
        • 2012-01-26
        • 2018-08-26
        • 2022-06-10
        • 2020-11-06
        • 1970-01-01
        • 2021-03-09
        • 2015-03-19
        相关资源
        最近更新 更多