在本地时区格式化 UTC 时间戳
Formatting UTC timestamp in local timezone
我有一个使用 DateTime class 创建的 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,但时间戳实际上来自另一个 system/module,因此解决方案必须适用于 DateTime.UtcNow
我做了一些测试,但我相信您需要使用 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
如果您有兴趣将 UTC 日期时间转换为特定时区的本地时间,您可以查看 TimeZoneInfo class。
这是一个例子:
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 for more details and List of Timezone ID's for use with FindTimeZoneById() in C#? 获取受支持时区的完整列表
我有一个使用 DateTime class 创建的 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,但时间戳实际上来自另一个 system/module,因此解决方案必须适用于 DateTime.UtcNow
我做了一些测试,但我相信您需要使用 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
如果您有兴趣将 UTC 日期时间转换为特定时区的本地时间,您可以查看 TimeZoneInfo class。 这是一个例子:
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 for more details and List of Timezone ID's for use with FindTimeZoneById() in C#? 获取受支持时区的完整列表