我有一个DateTime类创建的UTC时间戳。
var time = DateTime.UtcNow;
当我格式化我得到以下结果:
time.ToString("yyyy-MM-ddTHH:mm:sszzz")
> 2019-02-03T10:08:40+00:00
这是正确的,但我希望它在本地时区像这样的格式:
2019-02-03T11:08:40+01:00
<注意+01:00
我怎样才能得到呢?
我可以用DateTime.Local在这个例子中,但时间戳实际上是从另一个系统/模块来了,所以解决方案必须对像DateTime.UtcNow工作
如果您有兴趣转换UTC日期时间到特定的时区的本地时间你可以去看看的TimeZoneInfo类。下面是一个例子:
var utcDate = DateTime.UtcNow;
// 04/02/2019 11:23:39
// Kind is Utc
var localDate = utcDate.ToLocalTime();
// 04/02/2019 12:23:39
// Kind is now local
var timeZoneId = "US Eastern Standard Time";
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
DateTime usEasternStandardDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, timeZone);
// 04/02/2019 06:23:39
// Kind is unspecified
您还可以看看Convert UTC/GMT time to local time的详细信息和List of Timezone ID's for use with FindTimeZoneById() in C#?支持的时区的完整列表
我已经做了一些测试,但我相信你将需要使用DateTime.Now,而不是DateTime.UtcNow。
当您在格式使用“Z”字转化考虑到你想有一个时间偏移和相应地改变时间。
给下面的一个尝试,让我知道它是否适合你:
DateTime.Now.ToString("yyyy-MM-ddTHH:MM:sszzzz")
这给了我2019-02-04T10:02:32+00:00
(我在UTC时区虽然)
DateTime.UtcNow给人以UTC,时间偏移带是0更改为DateTime.Now以获取本地时间,而不是当前的时间。
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss K")
// 2019-02-04T08:36:11 -02:00
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss K")
// 2019-02-04T10:36:22 Z