DateTimeFormatter.Format()和字符串之间的区别

时间:2018-07-09 14:18:56

标签: c# .net uwp

DateTimeFormatter.Format的返回值应该是一个字符串。但是,当尝试解析DateTimeFormatter字符串的结果(例如新的DateTime对象中的日期部分)时,它将抛出"System.FormatException"

示例代码:

private void TestDateTimeFormatter()
{
    var forlatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("day");
    var casualDayFormat = forlatter.Format(new DateTime(2018, 1, 1));
    Console.WriteLine(casualDayFormat); // result is "1"
    var casualDateTime1 = DateTime.Parse("1" + ".1.2018"); //Works
    var casualDateTime = DateTime.Parse(casualDayFormat + ".1.2018"); //Throws wrong format exception
    Console.WriteLine(casualDateTime);
}

某些事情没有加起来。几乎可以肯定,casualDayFormat(这是一个字符串,并且值为“ 1”)与字符串"1"之间没有区别。但是为什么会引发异常?

编辑:例外详细信息

堆栈跟踪:

System.FormatException: String was not recognized as a valid DateTime.
       at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
//user-code 

异常_message:

  

其中一个已识别项目的格式无效。

其他方法:

事件int.Parse(...)不适用于字符串:

System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)

1 个答案:

答案 0 :(得分:1)

感谢HansPassant我发现了问题。将字符串转换为char数组时,我可以清楚地看到字符串中插入了隐藏的8206(从左到右)标记。

enter image description here

使用以下方法从字符串中删除该字符时:

string output = new string(casualDayFormat.Where(c => c < 128).ToArray());

解析再次像超级按钮一样工作。但是,作为C#开发人员,除了WinRT-API的这种行为之外,我不会。