我需要知道给定的字符串是否是有效的日期时间格式字符串,因为该字符串可能代表其他内容。我尝试了 DateTime.ParseExact(somedate.ToString(format), format) 认为它会因无效格式而呕吐,但事实并非如此。
所以我很擅长简单地测试字符串是否只包含“yYmMdDsShH”字符。像 std::string.find_first_not_of 这样的东西可以工作,但 System.String 没有这个。
我认为 RegEx 可能可以解决问题,但我对正则表达式很弱。
请注意,Linq 不适用于此版本(仅限 .NET 2.0)。
Updated
为了澄清,我需要知道给定的字符串是否表示日期时间格式而不是其他类似的东西:
if (input == "some special value")
... // it's a special case value
else if (Environment.GetEnvironmentVariable(input))
... // it's an environment variable name
else if (IsDateTimeFormatString(input))
... // it's a date time format string
else if (input.IndexOfAny(Path.GetInvalidPathChars()) < 0)
... // it's a file path
else
throw new Exception(); // Not a valid input
我可以将日期时间格式字符串限制为仅“yYmMdDsShH”,或者我也可以在其中添加一些分隔符,这取决于我允许或不允许。
对于.NET2,您需要为此进行自己的检查。例如,以下方法使用 foreach 进行检查:
bool FormatValid(string format)
{
string allowableLetters = "yYmMdDsShH";
foreach(char c in format)
{
// This is using String.Contains for .NET 2 compat.,
// hence the requirement for ToString()
if (!allowableLetters.Contains(c.ToString()))
return false;
}
return true;
}
如果您可以选择使用 .NET 3.5 和 LINQ,则可以使用可枚举.包含 http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx直接与角色一起工作,并且可枚举.全部 http://msdn.microsoft.com/en-us/library/bb548541.aspx。这会将上面的内容简化为:
bool valid = format.All(c => "yYmMdDsShH".Contains(c));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)