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

Iva*_*van 41 .net c# timezone datetime

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

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

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

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

San*_*ock 49

如果您想利用本地计算机时区,可以使用myDateTime.ToUniversalTime()从当地时间获取UTC时间或myDateTime.ToLocalTime()将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();
Run Code Online (Sandbox Code Playgroud)

如果您需要将时间从/转换为其他时区,您可以使用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);
Run Code Online (Sandbox Code Playgroud)

可用时区列表

MSDN上的TimeZoneInfo类


Fra*_*yne 33

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

另外,有几个DateTime构造函数重载采用DateTimeKind参数

  • `DateTimeKind`只包含本地,未指定和UTC.我可能无法使用某个特定时区. (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). (2认同)

小智 7

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

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

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

使用TimeZoneC#的功能来实现.