在 C# 中转换 UTC 日期/时间字符串
本文关键字:时间 字符串 日期 UTC 转换 | 更新日期: 2023-09-27 17:58:15
我需要将字符串"Fri Sep 11 00:00:00 GMT+04:00 2020"
转换为DateTime
对象11.09.2011
。
当我使用
DateTime result;
DateTime.TryParseExact(MyString, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy",
CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
result
等于{9/10/2020 11:00:00 PM}
。
如何修改代码以使日期组件11.09.2011
而不是10.09.2011
(我只需要日期而不关心时间(?
改为解析为DateTimeOffset
,前提是您有一个偏移量。从您正在使用的zz
说明符的文档中:
对于 DateTime 值,"zz"自定义格式说明符表示本地操作系统时区与 UTC 的签名偏移量,以小时为单位。它不反映实例的 DateTimeKind 属性的值。因此,不建议将"zz"格式说明符与日期时间值一起使用。
所以你最终会得到:
DateTimeOffset result;
bool success = DateTimeOffset.TryParseExact
(text, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy",
CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
从那里,您可以参加DateTime
部分,这将是 9 月 11 日午夜。
如果你只想要一个日期,你可以使用我的Noda Time项目创建一个LocalDate
:
LocalDate = OffsetDateTime.FromDateTimeOffset(result).LocalDateTime.Date;
(我很想建议直接解析到 OffsetDateTime
,但我们还没有得到支持。我们希望将其包含在 1.2 版中。
C# 没有纯Date
类型。
如果您不在乎时间,请忽略DateTime
的那部分。
如果希望时间始终为午夜,请使用 .Date
属性,该属性将返回日期相同但在午夜的DateTime
。