[英].NET: Getting UTC DateTime from date with GMT offset
我有四個整數:
這些整數表示我的網頁上的用戶選擇的日期和時間。 他們可能在地球上的任何地方。
值得慶幸的是,我在地球上的位置有GMT偏移量。 這是一個小數。
如何獲取這四個整數,加上GMT偏移小數,並獲得代表它們的UTC DateTime
時間?
要回答這個問題,請填寫此函數的方法體:
public static DateTime UtcDateTime(int day,int month,int year,int hour,decimal gmtOffset){// todo}
我建議將DateTime
與TimeZoneInfo結合使用。 您可以在服務器上存儲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.