将UTC时间转换为类似ISO 8601的格式

时间:2015-12-05 10:41:35

标签: c# .net datetime

我想将UTC时间转换为以下格式(IS0 8601)。 例如

2000-01-01T17:00:00-05:00

目前我正在使用UtcNow.Convert.ToString("s"),它以格式

为我提供日期时间
2015-12-05T08:49:14

但这会跳过"-"符号后面的时间部分。

有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:3)

我认为您的格式与ISO 8601格式的位不同。

首先,当您使用任何z格式说明符时,始终会得到+-符号,具体取决于您的UTC偏移值为负数还是正数。

最好是获取当前时区的utc偏移量,使用hh\\:mm格式对其进行格式化并合并格式化的UtcNow值,如;

var utcOffset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
var formattedOffset = utcOffset.ToString("hh\\:mm");
Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss'-'" + formattedOffset));

或者您可以使用The "s" standard format specifier并使用-字符串文字格式化偏移部分;

Console.WriteLine(DateTime.UtcNow.ToString("s") + utcOffset.ToString("'-'hh\\:mm"));