如何将string []数组转换为DateTime?

时间:2018-02-26 10:00:35

标签: c# datetime

我是C#的新手。

我有不同的文件名。例如:

  

C:\测试\ ABCD \ Warranty_2018_02_12__13_25_13.743.xml

从这个名字我想得到日期,比如 12.02.2018 13:25:13

所以文件永远不会相同。

我的代码:

        public string GetCreationDate(string fileResult)
    {
        int index = fileResult.IndexOf("_");
        if (index != -1)
        {
            string date = fileResult.Substring(index + 1, 20);
            char[] delimiter = new char[] { '_' };

            string[] dateWithoutLines = date.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);

            Array.Reverse(dateWithoutLines, 0, 3);

            //Here is the error
            //Guess it's because of the 'ToString()' 
            DateTime dateTime = DateTime.ParseExact(dateWithoutLines.ToString(), "dd/MM/yyyy hh:mm:ss",
                System.Globalization.CultureInfo.InvariantCulture);
            return dateTime.ToString();
        }
        return null;
    }

在调试器中,我现在在 dateWithoutLines 中有6个字符串,并且具有正确的日期。喜欢" 12" " 02" " 2018" ...

但后来它说这不是一个正确的DateTime格式。好的,但如果我删除了

  

ToString()

它说它不能将string []转换为字符串。那么这里有什么问题?

3 个答案:

答案 0 :(得分:1)

dateWithoutLinesstring[]ToString的{​​{1}}实现会产生" System.String []" ,这不是有效日期。此外,string[]不会使用DateTime.Parse,而只会使用字符串。

如果文件名中的日期格式始终相同,则可以使用string[]

string.Format

花括号中的数字通过索引引用传递的数组中的对象,即var formattedDate = string.Format("{2}.{1}.{0} {3}:{4}:{5}", dateWithoutLines); 将在您的示例中由{2}替换,12{1}替换为02等等。 请注意我使用了原始订单中的索引,而不是反转数组。

由于您正在解析日期以对其进行格式化,因此不需要解析,因为它已经格式化了。

答案 1 :(得分:1)

无需拆分原始字符串,反向,合并等等。

DateTime.TryParseExact为您完成所有工作:

另外,请考虑返回可为空的DateTime(DateTime?)而不是字符串:

public DateTime? GetCreationDate(string fileResult)
{
    int index = fileResult.IndexOf("_");
    if (index <= 0)
        return null;

    // check for string length, you don't want the following call to fileResult.Substring to throw an exception
    if (fileResult.Length < index+20)
        return null;

    string date = fileResult.Substring(index + 1, 20);

    DateTime dt;
    if (DateTime.TryParseExact(date, "yyyy_MM_dd__HH_mm_ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
        return dt;
    return null;
}

答案 2 :(得分:0)

对象实例dateWithoutLines是一个字符串数组,而不是单个字符串,因此您无法使用方法ToString()

所以我相信你想要的东西是:

foreach (string date in dateWithoutLines)
{
  DateTime dateTime = DateTime.ParseExact(date, "dd/MM/yyyy hh:mm:ss",
                System.Globalization.CultureInfo.InvariantCulture);
}

请注意,由于您有一个字符串数组,因此date是一个字符串对象,因此不需要为每个ToString()字符串实例调用date方法