我认为要解决这个问题,可能需要查看他们使用什么来解析用户的输入。如果他们使用的是 DateTime.Parse,那么当被解析的字符串不明确时,它将引发异常。
当然,程序员总是可以创建自己的方式来解析字段中的输入。但是,通常程序员在解析信息时并不热衷于处理模棱两可的情况。因此,为了简单起见,我们假设他们正在使用 DateTime.Parse 方法。
我创建了以下程序,以便您查看解析器何时将某些内容视为模棱两可。程序的输出如下图所示:
演示 DateTime.Parse 的代码:
static void Main(string[] args)
{
string input = "";
while(input != "exit" || input != "Exit")
{
Console.Write("Input: ");
input = Console.ReadLine();
string inputDate = input;
//try to parse it
try
{
DateTime date = DateTime.Parse(inputDate);
Console.WriteLine(date+"\n");
}
catch
{
//Exceptions. String not valid because ambiguity
Console.WriteLine("Ambiguous.\n");
//In here can also perform other logic, of course
}
}
}
为了将 DateTime 转换回字符串,您可以执行以下操作:
try
{
DateTime date = DateTime.Parse(inputDate);
Console.WriteLine(date+"\n");
string month = date.Month.ToString();
string day = date.Day.ToString();
string year = date.Year.ToString();
string resultingString = month + " " + day + " " + year ;
Console.WriteLine(resultingString);
}
catch(Exception e)
{
//Exceptions. String not valid because ambiguity
Console.WriteLine("Ambiguous");
}
您甚至可以以这种方式使用此信息制作自己的解析器,这样您就可以获得输入的 3 个字符长的日期的结果:
static void Main(string[] args)
{
string input = "";
while(input != "exit" || input != "Exit")
{
Console.Write("Input: ");
input = Console.ReadLine();
string inputDate = input;
try
{
DateTime date = DateTime.Parse(inputDate);
Console.WriteLine(date+"\n");
string month = date.Month.ToString();
string day = date.Day.ToString();
string year = date.Year.ToString();
string resultingString = month + " " + day + " " + year;
//string resultingString = month + "/" + day + "/" + year;
Console.WriteLine(resultingString);
}
catch(Exception e)
{
//Exceptions. String not valid because ambiguity
try
{
Console.WriteLine( myParser(inputDate) );
}
catch
{
Console.WriteLine("Ambiguous");
}
//Console.WriteLine("Ambiguous.\n");
//In here can also perform other logic, of course
}
}
}
static string myParser(string input)
{
string month,day,year,date;
switch (input.Length)
{
//In the case that it's 1 character in length
case 1:
return "Ambiguous.";
case 2:
return "Ambiguous.";
//did user mean #/#/200#? hopefully not #/#/199#...
case 3:
month = input.Substring(0, 1);
day = input.Substring(1, 1);
year = input.Substring(2, 1);
date = month + " " + day + " " + year;
return date;
//did user mean # # 20##
//or # ## 200#
//or ## # 200#
case 4:
return "Ambiguous";
//user probably means ## # ##
case 5:
return "Ambiguous";
case 6:
return "Ambiguous";
default:
return "Ambiguous";
}
}
同样,如果您想以字符串的形式将日期恢复为斜线 (/) 分隔格式,而无需分钟和小时等......
case 3:
month = input.Substring(0, 1);
day = input.Substring(1, 1);
year = input.Substring(2, 1);
date = month + " " + day + " " + year;
DateTime dateTimeObj = DateTime.Parse(date);
month = dateTimeObj.Month.ToString();
day = dateTimeObj.Day.ToString();
year = dateTimeObj.Year.ToString();
string resultingString = month + "/" + day + "/" + year;
return resultingString;