C#DateTime格式名称

时间:2014-05-01 10:40:03

标签: c# datetime datetime-format

DateTime格式的名称是什么:

Tue Apr 01 2014 00:00:00 GMT+0100 (GMT Daylight Time)

无论如何,我可以在代码中检测到这种格式吗?

我问的原因是我有一个带DateTime参数的函数,它有不同的格式,我想检测格式类型或名称;所以我可以根据dd/MM/yyyy hh:mm:ss的简单格式转换它们。

我得到的另一种格式是:2014-03-31T23:00:00.000Z

非常感谢。

修改

我写了这个函数,以便从Tue Apr 01 2014 00:00:00 GMT+0100(GMT日光时间)转换为dd/MM/yyyy hh:mm:ss。当输入类型为2014-03-31T23:00:00.000Z时,此函数将失败。

我想知道怎么可能识别出来的参数类型并进行相应的转换?

public static DateTime ConvertDateObjectToDateTime(string dateToConvert)
{
    var value = new DateTime();
    if (!string.IsNullOrEmpty(dateToConvert))
    {
        int gmtIndex = dateToConvert.IndexOf("G", System.StringComparison.Ordinal);

        string newDate = dateToConvert.Substring(0, gmtIndex).Trim();

        value = DateTime.ParseExact(newDate, "ddd MMM dd yyyy HH:mm:ss", CultureInfo.InvariantCulture);
        return value;
    }
    return value;
}

1 个答案:

答案 0 :(得分:2)

第二个肯定是UTC,但是,第一个可能是UTC +偏移量,或者它可能是本地+偏移量(它看起来像后者,我检查的越多)。您在军械库中用于解析特定日期的最佳工具是ParseExact方法。


根据您的编辑,我担心您忽略了时区信息。您现在假设日期已经是UTC(可能不是),只是解析/处理它...

但是,要回答您的特定问题

  

我想知道怎么可能识别出来的参数类型并进行相应的转换?

您实际上并不需要这样做,ParseExact有一个overload,允许您指定多种格式

value = DateTime.ParseExact(newDate, 
    new[] { "ddd MMM dd yyyy HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss.fff'Z'" }, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);