C# DateTimeStyles和空白字符

C# DateTimeStyles和空白字符,c#,datetime,whitespace,C#,Datetime,Whitespace,我试图了解datetimestyle在DateTime.Parse(strings,IFormatProvider,datetimestyle)方法中的用法 基本上,datetimestyle是像allownerwhite、allowreadingwhite和其他处理“空白字符”的样式一样填充的 根据msdn.microsoft,这些字段用于在我们要转换为Datetime值的字符串中忽略空格 我试过这样的东西 var TestDate = "\"t\"31/07/1998 12:

我试图了解datetimestyle在
DateTime.Parse(strings,IFormatProvider,datetimestyle)
方法中的用法

基本上,
datetimestyle
是像
allownerwhite
allowreadingwhite
和其他处理“空白字符”的样式一样填充的

根据msdn.microsoft,这些字段用于在我们要转换为
Datetime
值的字符串中忽略空格

我试过这样的东西

        var TestDate = "\"t\"31/07/1998 12:00:00";

        // Try To parse with en-GB culture

        var result1 = DateTime.Parse(TestDate, CultureInfo.CreateSpecificCulture("en-GB"),DateTimeStyles.AllowWhiteSpaces);
        Console.WriteLine(result1);
但我有个例外

对于初学者,我没有找到任何例子来说明空格的概念,这些字段处理空格

对我来说,我认为转义字符是C#中的一个空白,这就是为什么用它来观察会发生什么


有人能帮我举一些关于这两点的例子吗?空格,带空格的日期时间样式当你使用
\
时,你告诉编译器要引用后面的文本承租人。
这就是为什么在您的例子中,您试图解析以
“t”
开头的日期计时字符串


您可以解析
“31/07/1998 12:00:00”

正如评论中的其他人所提到的,您的表达式中有一个文本
,它不是空白,而是一个无效字符。这就是您的值无法解析的原因


要回答你的另一个问题:

有谁能帮我举一些关于带空格的日期时间样式的例子吗

显然,
Allow*
值仅与
(Try)ParseExact
相关,而与
(Try)Parse
()无关:

ParseExact
TryParseExact
方法可以使用任何
DateTimeStyles
值。但是,如果未选择任何Allow*值,则输入字符串必须与格式字符串具有完全相同的空格字符

例如:

string s = "\t 1998-07-31 12:00:00Z "; // has leading and trailing whitespace
DateTime dt;

// Prints True: (Try)Parse does not care.
Console.WriteLine(DateTime.TryParse(s, null, DateTimeStyles.None, out dt));

// Prints False: (Try)ParseExact does not like whitespace.
Console.WriteLine(DateTime.TryParseExact(s, "u", null, DateTimeStyles.None, out dt));

// Prints True: (Try)ParseExact accepts whitespace, if we tell it to.
Console.WriteLine(DateTime.TryParseExact(s, "u", null, DateTimeStyles.AllowWhiteSpaces, out dt));

您的测试字符串中有文本
字符,这些字符不是空白,因此不会被忽略-因此出现异常
“\t31/07/1998 12:00:00”
将进行分析。使用trim删除结尾的空格:var result1=DateTime.parse(TestDate.trim()、CultureInfo.CreateSpecificCulture(“en GB”)、DateTimeStyles.allowHiteSpaces);控制台写入线(结果1);一旦输入被固定为实际包含制表符和空格,则无需重新编程
Parse
也可以工作。OP的字符串不正确地使用转义,因此它以双引号而不是制表符结束
DateTime.Parse(“\t31/07/1998 12:00:00”,CultureInfo.CreateSpecificCulture(“en GB”),DateTimeStyles.AllowHiteSpaces)
throw@PanagiotisKanavos字体我知道。我的回答回答了“有谁能帮我举一些关于两点空格和带空格的DateTimeStyles的例子吗?”。我现在已经说得更清楚了,也解决了打字错误。我明白你的意思:我尝试了
日期时间样式。没有
,没有exception@Heinzi-如果我对
var s=“\t 1998-07-31 12:00:00Z”
使用Parse方法,并且不使用任何日期时间样式,pares方法也可以工作。如果解析操作没有问题,为什么我会使用dateTimeStyles(AllowHiteSpaces?!一般来说,为什么我会忽略字符串中的空格?