如何设置DateTime值的时区(或种类)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置DateTime值的时区(或种类)?相关的知识,希望对你有一定的参考价值。

我的意思是将严格的UTC时间存储在DateTime变量中,并以ISO 8601格式输出。

为了做到最后我使用.ToString(“yyyy-MM-ddTHH:mm:sszzz”),它发现时区是UTC + 01:00。

我试过使用.Kind = DateTimeKind.Utc,但它说Kind属性没有setter。

如何以UTC格式明确指定时间? Kind属性是如何设置的?

答案

虽然DateTime.Kind属性没有setter,但静态方法DateTime.SpecifyKind会为Kind创建一个具有指定值的DateTime实例。

另外,有几个DateTime constructor overloads采用DateTimeKind参数

另一答案

如果您想利用本地计算机时区,可以使用myDateTime.ToUniversalTime()从当地时间或myDateTime.ToLocalTime()获取UTC时间,以将UTC时间转换为本地计算机的时间。

// 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

另一答案

您也可以尝试这一点,它很容易实现

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

更改要更改标准时间的文本。

使用C#的TimeZone特性来实现。

以上是关于如何设置DateTime值的时区(或种类)?的主要内容,如果未能解决你的问题,请参考以下文章

防止对 DateTime 值的反序列化进行时区转换

python中datetime怎么设置时区

如何表示各个时区的时间DateTime.ToString

使用 ObjectMapper 为 JodaTime 设置时区偏移的 Jackson DateTime 格式

如何在特定时区转换 DateTime?

如何在特定时区转换 DateTime?