获取两个不同时区的日期时间

时间:2017-07-13 10:14:59

标签: javascript c# asp.net-core

我将日期时间存储在文档数据库数据库中

"myDate": "2017-06-27T15:44:35.6752016+09:30",

和我在C#中的属性存储日期时间低于

public DateTime MYDate{ get; set; }

在我的屏幕上,用户可以单击一个按钮,将按钮保存在文本文件中。现在,我想要存储在该文本文件中的信息是MyDate值作为字符串,另一个版本的MyDate也作为字符串。另一个版本的MyDate可以是不同的时区。例如,我在澳大利亚创建MyDate,墨尔本现在可以说我搬到了美国,当我在客户端点击该按钮时,我传递DateTimeOffset信息,并希望在AmericanTime等效时间内看到原始日期和另一个版本。我该如何解决这个问题?

在.net中我知道我们可以使用TimeZoneInfo.FindSystemTimeZoneById(“id”)但是如何从javascript客户端传递该id信息?

1 个答案:

答案 0 :(得分:1)

我想我找到了最好的解决方案,适用于任何时区使用我的应用的客户。为实现这一点,我使用了两个库

1)时刻时区 - 获取客户端时区(iana格式) 2)TimeZoneConverter - 由Matt编写的c#nuget包(datetime专家)。这是将iana时区转换为窗口支持的时区所必需的

用法

从客户端我们可以使用如下所示的时刻时区传递iana基地时区

const keyName = moment.tz.guess();

然后在c#方面我们必须做的所有

var clientTimeZone = TZConvert.IanaToWindows(keyName);

var windowsStandardTime = TimeZoneInfo.GetSystemTimeZones().First(x => x.Id == clientTimeZone);

var clientTime = DateTime.SpecifyKind(
                TimeZoneInfo.ConvertTime(dateTimeValue, windowsStandardTime),
                DateTimeKind.Utc);

希望它能帮助别人