在C#中转换UTC日期/时间字符串

我需要将字符串"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}

如何修改代码,使日期组件为10.09.2011不是 10.09.2011 (我只需要日期而不关心时间)?

如果你一个偏移量,请转到DateTimeOffset 。 从您正在使用的zz说明符的文档 :

对于DateTime值,“zz”自定义格式说明符表示本地操作系统的时区与UTC的签名偏移量,以小时为单位。 它不反映实例的DateTimeKind属性的值。 因此,建议不要将“zz”格式说明符与DateTime值一起使用。

所以你最终得到:

 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