从带有GMT偏移量的日期中获取UTC日期时间



我有四个整数:

  • 月中的日期(1 - 31)
  • 一年中的月份(1 - 12)
  • <
  • 年/gh>
  • 一天中的小时数(0 - 23)

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

谢天谢地,我有他们在地球上位置的GMT偏移量。它是一个小数

我如何将这四个整数加上GMT偏移十进制,并在UTC中得到表示它们的DateTime ?

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

public static DateTime UtcDateTime(int日,int月,int年,int小时,十进制gmtOffset) {//todo}

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

虽然微软在MSDN中声明我们应该使用DateTimeOffset而不是DateTime,但使用DateTimeOffset会出现一些问题。我未能尝试序列化/反序列化DataTimeOffset实例通过WCF传输它们。和DateTime/TimeZoneInfo工作良好。我很喜欢DateTimeOffset,但在某些方面它仍然不适合真正的应用程序。

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

给你:

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;
}

你应该使用DateTimeOffset

将小数转换为所需的精度,然后按如下方式构造(以FromSeconds为例):

新DateTimeOffset(年,月,日,小时,0,0,TimeSpan.FromSeconds(抵消));

http://msdn.microsoft.com/en-us/library/system.datetimeoffset (v =应用程序). aspx

相关内容

  • 没有找到相关文章

最新更新