【问题标题】:Displaying UTC datetime from database in local time when it has no offset在没有偏移量时以本地时间显示数据库中的 UTC 日期时间
【发布时间】:2016-09-26 03:54:27
【问题描述】:

对于我数据库中的一条记录,我们存储了两个时间戳,它们代表同一时刻。

一个是 UTC,例如 '2016-09-23 11:43:34.0000000'

另一个具有本地时间的设备将数据上传到数据库,例如 '2016-09-23 06:43:34.0000000'

由于列是 datetime2,它们都没有存储偏移量。我的问题是,在我的服务器上使用 C# 或在客户端应用程序上使用 Javascript(例如 moment.js),我能否在用户本地时间显示 UTC 时间戳?从客户端应用程序我可以获得当前用户的时间偏移并进行计算,我只是不明白我应该对 UTC 时间戳进行哪种类型的计算。

我查看了这篇文章 Here 中的示例,但注意到他们使用的原始日期时间格式 ('2015-02-05T07:52:27.59') 与我的有很大不同。

【问题讨论】:

    标签: javascript c# datetime momentjs


    【解决方案1】:

    以下是解析 utc 时间并将其转换为本地时间的各种方法。我更喜欢时区变化。

    var utcMoment = moment.utc('2016-09-23 11:43:34.3456789', 'YYYY-MM-DD hh:mm:ss.SSSSSSS').format('YYYY-MM-DD HH:mm:ss.SSS'));      
    
    //Using Date
    var localTime  = moment.utc(utcMoment).toDate().format('YYYY-MM-DD HH:mm:ss');
    //Using local
    var localTimeMoment  = moment.utc(utcMoment).local().format('YYYY-MM-DD HH:mm:ss');
    //Using Timezone
    var localTimeTz  = moment.utc(utcMoment).tz('America/Chicago').format('YYYY-MM-DD HH:mm:ss');
    //Using Offset
    var localTimeOffset = moment.utc(utcMoment).utcOffset('-05:00').format('YYYY-MM-DD HH:mm:ss');
    

    【讨论】:

    • 一个问题,我注意到您的初始 utc 时间戳包含小数点后的各种数字,在我的情况下,它始终以 .000000 存储在数据库中。这会对您的上述结果有什么大的影响吗?
    • 我认为它不会有任何影响。请验证。
    【解决方案2】:

    使用 var date =new GetUTCDate(//any date);

    你会得到 UTC 格式的日期

    【讨论】:

    • 我已经有一个 UTC 日期,在上面的例子中是 2016-09-23 11:43:34.0000000 我的问题是当我的 UTC 日期出现时如何在用户本地时间显示这个时间戳没有偏移量。
    【解决方案3】:

    如果需要 c# 解决方案,您可以使用 DateTimeOffset 对象。具体来说,您将需要使用tryParse 方法,该方法允许您以UTC 格式打印它。

    如果您更喜欢 js 解决方案而不是使用 moment 往往是更好的选择。我相信您需要 moment().utcOffset() 函数来操作您当前的时间戳。

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2018-05-08
      • 2017-07-31
      相关资源
      最近更新 更多