繁体   English   中英

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

[英]How to set a time zone (or a Kind) of a DateTime value?

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

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

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

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

如果您想利用本地机器时区,可以使用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();

如果您需要将时间从/到其他时区,您可以使用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);

可用时区列表

MSDN 上的时区信息 class

虽然 DateTime.Kind 属性没有设置器,但 static 方法DateTime.SpecifyKind使用 Kind 的指定值创建 DateTime 实例。

或者,有几个DateTime 构造函数重载采用 DateTimeKind 参数

你也可以试试这个,很容易实现

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功能来实现。

我在 System.DateTime in.net framework 4.8 中遇到了时区问题。 我想这个版本的框架有一个错误。

我在.net framework 4.8 和.net 5.0(+3 是我当地的时区)下运行了这段代码。

var dateTime = new DateTime(2021, 3, 3, 12, 13, 14);
var dateTimeKindUtc = new DateTime(2021, 3, 3, 12, 13, 14, DateTimeKind.Utc);
var dateTimeSpecifyKind = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
var dateTimeToUniversalTime = dateTime.ToUniversalTime();
var timeZoneInfoConvertTimeToUtc = TimeZoneInfo.ConvertTimeToUtc(dateTime);

Console.WriteLine($"{nameof(dateTime)} {dateTime:yyyy-MM-ddTHH:mm:sszzz}");
Console.WriteLine($"{nameof(dateTimeKindUtc)} {dateTimeKindUtc:yyyy-MM-ddTHH:mm:sszzz}");
Console.WriteLine($"{nameof(dateTimeSpecifyKind)} {dateTimeSpecifyKind:yyyy-MM-ddTHH:mm:sszzz}");
Console.WriteLine($"{nameof(dateTimeToUniversalTime)} {dateTimeToUniversalTime:yyyy-MM-ddTHH:mm:sszzz}");
Console.WriteLine($"{nameof(timeZoneInfoConvertTimeToUtc)} {timeZoneInfoConvertTimeToUtc:yyyy-MM-ddTHH:mm:sszzz}");

网络框架 4.8 output

dateTime 2021-03-03T12:13:14+03:00
dateTimeKindUtc 2021-03-03T12:13:14+03:00
dateTimeSpecifyKind 2021-03-03T12:13:14+03:00
dateTimeToUniversalTime 2021-03-03T09:13:14+03:00
timeZoneInfoConvertTimeToUtc 2021-03-03T09:13:14+03:00

净5.0 output

dateTime 2021-03-03T12:13:14+03:00
dateTimeKindUtc 2021-03-03T12:13:14+00:00
dateTimeSpecifyKind 2021-03-03T12:13:14+00:00
dateTimeToUniversalTime 2021-03-03T09:13:14+00:00
timeZoneInfoConvertTimeToUtc 2021-03-03T09:13:14+00:00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM