在C#中将字符串dd-MM-yyyy转换为DateTime yyyy-MM-dd

chi*_*apa -1 c# datetime

我有一个这种格式的字符串:

21?-?10?-?2014? ?15?:?40?:?30
Run Code Online (Sandbox Code Playgroud)

我想以格式制作一个DateTime:

2014-?10?-?21 ?15?:?40?:?30
Run Code Online (Sandbox Code Playgroud)

我试过了:

DateTime dt = DateTime.ParseExact("21?-?10?-?2014? ?15?:?40?:?30", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

但没有运气,它抛出异常 String was not recognized as a valid DateTime

编辑

我也尝试过:

DateTime dt = DateTime.ParseExact("21-?10?-?2014? ?15?:?40?:?30", "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

在两个参数中使用相同的格式.例外情况是一样的,所以问题不在于格式之间的区别.我以前检查过.

Cod*_*ter 6

您的输入字符串包含从左到右的标记字符,您可以通过在支持Unicode的编辑器中粘贴它并查看空白字符来查看.另请参见Ideone(仅在编辑模式下可见).

清理你的输入:

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        string dateTimeString = "21?-?10?-?2014? ?15?:?40?:?30";
        dateTimeString = Regex.Replace(dateTimeString, @"[^\u0000-\u007F]", string.Empty);

        string inputFormat = "dd-MM-yyyy HH:mm:ss";
        string outputFormat = "yyyy-MM-dd HH:mm:ss";
        var dateTime = DateTime.ParseExact(dateTimeString, inputFormat, CultureInfo.InvariantCulture);
        string output = dateTime.ToString(outputFormat);

        Console.WriteLine(output);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

2014-10-21 15:40:30
Run Code Online (Sandbox Code Playgroud)