说明
在我的应用程序中,允许用户以字符串格式EX-" 01/01 / 2000"插入日期,并且我使用DateTime.Parse("01/01/00");
解析此字符串值它工作正常。但在少数情况下,它正在破裂。
案例1:
输入:" 01/01/00"
代码:DateTime.Parse(" 01/01/00");
输出:01/01/2000
案例2:
输入:" 01/01 / 000"
代码:DateTime.Parse(" 01/01 / 000");
输出:获取错误"字符串未被识别为有效日期时间。"
案例3:
输入:" 01/01/0000"
代码:DateTime.Parse(" 01/01 / 0000");
输出:获取错误"字符串未被识别为有效日期时间。"
如何将000或0000分析为正确的年份?
答案 0 :(得分:0)
查看Noda Time库。它支持各种地理区域中的大范围日期以及它们之间的转换。见http://nodatime.org
答案 1 :(得分:0)
您可以使用以下扩展方法
进行转换public static DateTime GetDateTime(this string strdate)
{
int day = Convert.ToInt32(strdate.Split('/')[0]);
int month = Convert.ToInt32(strdate.Split('/')[1]);
int year = Convert.ToInt32(strdate.Split('/')[2]);
if (year == 0)
year = 2000;
return new DateTime(year, month, day);
}
答案 2 :(得分:0)
如果您检查输入,则输入input =" 01/01/000 "它增加了一个零,并使值=" 01/01/0000 "这不存在因此抛出异常。尝试 输入="的 01/01/100 强>"并且您将获得输出" 01/01/0100 " 范围限制为最后两位数,如果您键入( 00到29 )范围内的任何数字,您将获得2000+的日期,即输入=(" 01/01 / 29 ")你得到输出=(" 01/01/2029 ")但如果输入input =(" 01/01/30" )你会得到输出=(" 01/01/1930 ")
答案 3 :(得分:0)
当您验证日期时,您应该记住有效和无效的日期格式应如下所示:
有效日期:" 02/02 / 0002"," 02/02/02"
无效日期:" 02/02 / 002"," 02/02 / 00002"
请找到以下代码供您参考。我认为这是不言自明的。
using System;
using System.Globalization;
class Program
{
static void Main(string[] args)
{
//Valid Dates: "02/02/0002", "02/02/02"
//Invalid Dates: "02/02/002", "02/02/00002"
string date = "02/02/02";
bool validDate = isDateTimeFormatValid(date);
string status = validDate ? "valid" : "invalid";
Console.WriteLine(date + " is " + status + " date");
Console.ReadLine();
}
private static bool isDateTimeFormatValid(string date)
{
DateTime dateResult;
bool chkYY = false;
bool chkYYYY = false;
if (date.Contains("/"))
{
chkYY = DateTime.TryParseExact(date, "MM/dd/yy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateResult);
chkYYYY = DateTime.TryParseExact(date, "MM/dd/yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateResult);
}
//Performing OR Operation
bool result = chkYY | chkYYYY;
return result;
}
}