格式化本地时区的UTC时间戳

时间:2019-02-04 10:10:57

标签: c# datetime timezone utc

我有一个用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的系统上工作

3 个答案:

答案 0 :(得分:2)

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

当您在格式中使用'z'字符时,转换过程会考虑您需要时间偏移并相应地更改时间。

尝试以下操作,让我知道它是否适合您:

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

这给了我2019-02-04T10:02:32+00:00(尽管我处于UTC时区)

答案 1 :(得分: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 :(得分: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