在当地时区格式化UTC时间戳

问题描述 投票:1回答:3

我有一个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工作

c# datetime timezone utc
3个回答
1
投票

如果您有兴趣转换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#?支持的时区的完整列表


2
投票

我已经做了一些测试,但我相信你将需要使用DateTime.Now,而不是DateTime.UtcNow。

当您在格式使用“Z”字转化考虑到你想有一个时间偏移和相应地改变时间。

给下面的一个尝试,让我知道它是否适合你:

DateTime.Now.ToString("yyyy-MM-ddTHH:MM:sszzzz")

这给了我2019-02-04T10:02:32+00:00(我在UTC时区虽然)


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.