.NET:从具有 GMT 偏移量的日期获取 UTC 日期时间

标签 .net datetime localization date

我有四个整数:

  • 一月中的某一天(1 - 31)
  • 一年中的月份(1 - 12)
  • 年份
  • 一天中的某个时间(0 - 23)

这些整数代表我的网页上的用户选择的日期和时间。他们可能在地球上的任何地方。

值得庆幸的是,我有他们在地球上位置的 GMT 偏移量。这是一个小数。

如何获取这四个整数,加上 GMT 偏移小数,并获得表示它们的 UTC 格式的 DateTime

要回答这个问题,请填写该函数的方法主体:

公共(public)静态DateTime UtcDateTime(int日,int月,int年,int小时,小数gmtOffset){ //去做 }

最佳答案

我建议将 DateTimeTimeZoneInfo 结合使用。 。您可以在服务器上存储 UTC 时间,并使用每个用户自己的 TimeZoneInfo 为每个用户转换时间。 TimeZoneInfo 可以由用户设置,或者如果可能的话,您可以以某种方式从 Windows 设置中提取它。我们要求用户在其设置页面上设置TimeZoneInfo(通过下拉列表)。

更新

虽然 Microsoft 在 MSDN 中声明我们应该使用 DateTimeOffset 而不是 DateTime,但使用 DateTimeOffset 仍存在一些问题。我尝试序列化/反序列化通过 WCF 传输的 DataTimeOffset 实例失败。 DateTime/TimeZoneInfo 工作正常。我非常喜欢 DateTimeOffset,但在某些方面它仍然不适合实际应用程序。

DateTimeOffset 的另一个缺点是它不包含转换时间所需的所有信息,因为它只包含一个偏移量。但可能有多个具有相同偏移量的实际时区,因此您无法仅根据偏移量恢复时区。时区不仅仅是一个偏移量,它是定义时间转换、冬夏令时等的一组规则

更新

你在这里:

private static DateTime ToUTC(int day, int month, int year, int hour, decimal utcOffset)
{
    TimeSpan offset = TimeSpan.FromMinutes((double)(utcOffset * 60)); // time zone offset is always aligned to minutes
    return new DateTimeOffset(year, month, day, hour, 0, 0, offset).ToUniversalTime().DateTime;
}

关于.NET:从具有 GMT 偏移量的日期获取 UTC 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5697307/

相关文章:

c# - mscorlib 4.x 和 mscorlib 2.x 之间的 MSBuild 冲突

.net - Visual Studio 2003 上的 "Publish"操作在哪里?

Pandas:如何在不使用for循环的情况下将日期列中每个条目的日期增加一定天数

sql - Mysql 函数生成毫秒精度时间戳作为 BIGINT(13)

iphone - 如何在 iPhone 上将中文文本音译为拼音?

c# - 带有 ChannelFactory 的 WCF 客户端,方法返回 ProtocolException/405 Method not Allowed

.net - 构建 .net 核心 docker 镜像失败

sql-server - 请确认: SYSDATETIME() is slower than GETDATE() in WHERE clause

windows - 奇怪的字符 : interaction of R and Windows locale?

windows - 如何在 Windows 中使用 enable pseudo-locale 进行测试?