2011-06-04 44 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#实现的功能。

相关问题