【问题标题】:Get datetime in two different timezone获取两个不同时区的日期时间
【发布时间】:2017-12-18 01:31:33
【问题描述】:

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

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

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

public DateTime MYDate{ get; set; }

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

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

【问题讨论】:

  • 在该解决方案中,他们根据配置 GetFromConfig.ManilaTimeZoneKey() 计算它,在我的情况下它可以是任何东西,所以我必须从.net 支持的客户端
  • 答案仍然是使用TimeZoneInfo来进行不同时区之间的日期时间转换。
  • 我可以看到,但我感到困惑的是如何从 javascript 客户端传递 SystemTimeZoneId?

标签: javascript c# asp.net-core


【解决方案1】:

我认为我已经找到了适用于在任何时区使用我的应用程序的任何客户的最佳解决方案。为此,我使用了两个库

1) moment timezone - 获取客户端时区(iana 格式) 2) TimeZoneConverter - 由 Matt(日期时间专家)编写的 c# nuget 包。这是将 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);

希望对他人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2012-03-24
    • 2021-11-28
    相关资源
    最近更新 更多