在没有偏移时,以本地时间显示数据库中的UTC datetime

Displaying UTC datetime from database in local time when it has no offset

本文关键字:数据库 显示 时间 datetime UTC      更新时间:2023-09-26

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

UTC格式,如'2016-09-23 11:43:34.0000000'

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

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

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

下面是解析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');

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

你将得到UTC格式的日期

如果你想要一个c#解决方案,你可以使用DateTimeOffset对象。具体来说,你需要使用tryParse方法,它将允许你在UTC中打印它。

如果你更喜欢js的解决方案,而不是与时刻往往是一个更好的选择。我认为您需要moment(). utcoffset()函数来操作当前的时间戳。