以本地时区格式设置 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

我怎样才能得到这个?

我可以在这个例子中使用DateTime.Local,但时间戳实际上来自另一个系统/模块,因此解决方案必须适用于DateTime.UtcNow

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

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

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

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

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

如果您有兴趣将UTC DateTime转换为特定时区的本地时间,可以查看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

你也可以看看 将 UTC/GMT 时间转换为本地时间以获取更多详细信息,以及用于 C# 中的 FindTimeZoneById(( 的时区 ID 列表?有关支持的时区的完整列表

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

相关内容

  • 没有找到相关文章

最新更新