在我的WinForm中,文本框中的用户输入日期为' 210514'或! 231113(格式为ddmmyy) 今天假设日期= 291014(29-Oct-14)。 使用Visual Studio 2010 C#4.0。 PC日期时间设置:GMT +08:00 dd-MMM-yy。
代码隐藏:
// Split the input string into YYMMDD format and set it to a date object
DateTime inputDate = new DateTime(Convert.ToInt32(input.Substring(4, 2)), Convert.ToInt32(input.Substring(2, 2)), Convert.ToInt32(input.Substring(0, 2)));
// WinForm允许用户在今天日期之前的2年内输入日期,也不能超过今天日期的1个月。
DateTime minDate = DateTime.Now.AddMonths(-24);
DateTime maxDate = DateTime.Now.AddMonths(1);
我尝试了很多方法,但都没有用(我也检查过很多线程/论坛)。
//Method 1
if(inputDate >= minDate && inputDate <= maxDate)
return true
//Method 2: B return true but A ***always*** return false, Why??
if (inputDate >= minDate)
A = true;
if (inputDate <= maxDate)
B = true;
//Method 3: B return true but A ***always*** return false, Why??
if ((DateTime.Now - inputDate).Days >= (DateTime.Now - minDate).Days)
A = true;
if (inputDate <= maxDate)
B = true;
答案 0 :(得分:1)
方法A是正确的,如果你使用调试器,你会看到为什么它不起作用。
string input = "291014";
DateTime inputDate = new DateTime(
Convert.ToInt32(input.Substring(4, 2)),
Convert.ToInt32(input.Substring(2, 2)),
Convert.ToInt32(input.Substring(0, 2)));
Console.WriteLine(inputDate.Year); // 14, oops
Console.WriteLine(DateTime.Now.Year); // 2014
要修复它,请将2000添加到年份
DateTime inputDate = new DateTime(
2000 + Convert.ToInt32(input.Substring(4, 2)),
Convert.ToInt32(input.Substring(2, 2)),
Convert.ToInt32(input.Substring(0, 2)));
答案 1 :(得分:0)
我发布此帖作为答案,以便我可以发布代码。我刚刚这样做了:
DateTime inputDate;
if (DateTime.TryParseExact(this.textBox1.Text, "ddMMyy", null, DateTimeStyles.None, out inputDate))
{
var minDate = DateTime.Today.AddYears(-2);
var maxDate = DateTime.Today.AddMonths(1);
var A = inputDate >= minDate;
var B = inputDate <= maxDate;
MessageBox.Show(string.Format("input: {1:d}{0}min: {2:d}{0}max: {3:d}{0}A: {4}{0}B: {5}",
Environment.NewLine,
inputDate,
minDate,
maxDate,
A,
B));
}
else
{
MessageBox.Show("Invalid input");
}
我进入&#34; 091014&#34;在我的TextBox
中,消息称A
为true
。同样适用于&#34; 101012&#34;和&#34; 101014&#34;。除非你的系统上有什么东西是腐败的,否则它不是代码,而是你错了。测试确切的代码,看看你是否得到相同的结果。