簡體   English   中英

.NET:使用GMT偏移從日期獲取UTC DateTime

[英].NET: Getting UTC DateTime from date with GMT offset

我有四個整數:

  • 每月的日子(1 - 31)
  • 一年中的一個月(1 - 12)
  • 一天中的小時(0-23)

這些整數表示我的網頁上的用戶選擇的日期和時間。 他們可能在地球上的任何地方。

值得慶幸的是,我在地球上的位置有GMT偏移量。 這是一個小數。

如何獲取這四個整數,加上GMT偏移小數,並獲得代表它們的UTC DateTime時間?

要回答這個問題,請填寫此函數的方法體:

public static DateTime UtcDateTime(int day,int month,int year,int hour,decimal gmtOffset){// todo}

我建議將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;
}

您應該使用DateTimeOffset。

將小數轉換為您需要的精度,然后如下構造(使用FromSeconds作為示例):

new DateTimeOffset(year,month,day,hour,0,0,TimeSpan.FromSeconds(offset));

http://msdn.microsoft.com/en-us/library/system.datetimeoffset(v=VS.90).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM