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

时间:2013-02-08 14:00:07

标签: c# tryparse

我需要将字符串"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(我只需要日期而不关心时间)?

2 个答案:

答案 0 :(得分:7)

考虑到你已经得到一个偏移量,将其解析为DateTimeOffset。来自您正在使用的documentation of the zz specifier

  

使用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);

从那里,您可以参加9月11日午夜的DateTime部分。

如果您希望一个日期,您可以使用我的Noda Time项目创建LocalDate

LocalDate = OffsetDateTime.FromDateTimeOffset(result).LocalDateTime.Date;

(我很乐意建议直接解析OffsetDateTime,但我们还没有得到支持。我们希望将它包含在1.2版中。)

答案 1 :(得分:4)

C#没有纯Date类型 如果您不关心时间,请忽略DateTime

的那一部分

如果您希望时间始终为午夜,请使用.Date属性,该属性将返回DateTime,其日期相同,但午夜时间。