2011-06-04 81 views
32

我的意思是在DateTime變量中存儲嚴格的UTC時間並以ISO 8601格式輸出。如何設置日期時間值的時區(或種類)?

最後我做了.ToString(「yyyy-MM-ddTHH:mm:sszzz」),它發現時區是UTC + 01:00。

我試過使用.Kind = DateTimeKind.Utc,但它說Kind屬性沒有setter。

如何明確指定時間是UTC? Kind屬性如何設置?

回答

26

雖然DateTime.Kind屬性沒有setter,但靜態方法DateTime.SpecifyKind會爲Kind創建一個具有指定值的DateTime實例。

Altenatively有幾個DateTime constructor overloads如果你想利用你的本地時區,您可以使用myDateTime.ToUniversalTime()從本地時間或myDateTime.ToLocalTime()獲得UTC時間UTC時間來轉換採取DateTimeKind參數

+1

'DateTimeKind'只包含本地,未指定和UTC。我想要使​​用一個特定的時區可能是不可能的。 – hardywang 2015-03-09 20:10:07

+2

@hardywang如果你只需要指定一個時間和UTC的偏移量,那麼你可以使用[DateTimeOffset](https://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx)。如果您確實需要識別特定的時區,那麼您需要將DateTime與[TimeZoneInfo](https://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx)結合使用。請參閱[在DateTime,DateTimeOffset和TimeZoneInfo之間選擇](https://msdn.microsoft.com/en-us/library/bb384267.aspx)進行討論。 – 2015-03-15 05:53:48

31

本地機器的時間。

// convert UTC time from the database to the machine's time 
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00); 
var localTime = databaseUtcTime.ToLocalTime(); 

// convert local time to UTC for database save 
var databaseUtcTime = localTime.ToUniversalTime(); 

如果您需要的時間從/到其他時區轉換,您可以使用TimeZoneInfo.ConvertTime()TimeZoneInfo.ConvertTimeFromUtc()

// convert UTC time from the database to japanese time 
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00); 
var japaneseTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time"); 
var japaneseTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, japaneseTimeZone); 

// convert japanese time to UTC for database save 
var databaseUtcTime = TimeZoneInfo.ConvertTimeToUtc(japaneseTime, japaneseTimeZone); 

List of available timezones

TimeZoneInfo class on MSDN

3

你可以試試這個爲好,這是很容易實現

TimeZone time2 = TimeZone.CurrentTimeZone; 
DateTime test = time2.ToUniversalTime(DateTime.Now); 
var singapore = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time"); 
var singaporetime = TimeZoneInfo.ConvertTimeFromUtc(test, singapore); 

改變你想改變其標準時間的文本。

使用TimeZone C#實現的功能。

相關問題