我发现Date.TryParse对输入非常宽松 - 因此跳过日期或月份仍将返回一个值,尽管总是四舍五入。 E.g:
DateTime.TryParse("2010", out testDate)
-> 01 Jan 2010
或
DateTime.TryParse("may 2010", out testDate)
-> 01 May 2010
我想允许用户输入一个日期作为搜索的上限日期 - 是否有一种简单的方法可以将其舍入 - 例如:返回时的2010年12月31日2010'进入......
提前致谢。
答案 0 :(得分:1)
你可以这样:
string inputDate = "May 2010";
int year = 0;
DateTime date = new DateTime();
// Try to parse just by year.
// Otherwise parse by the input string.
if (int.TryParse(inputDate, out year))
{
date = new DateTime(year, 12, 31);
}
else
{
// Parse the date and set to the last day of the month.
if (DateTime.TryParse(inputDate, out date))
{
date = date.AddMonths(1).AddMilliseconds(-1);
}
else
{
// Throw exception for invalid date?
}
}
答案 1 :(得分:1)
假设您希望能够解析DateTime.TryParse
可以使用的所有格式,您可以执行以下操作:
public static bool DateTimeTryParseMax(string dtText, out DateTime testDate)
{
testDate = DateTime.MinValue;
string nFmt = null;
foreach (string fmt in System.Globalization.DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns().Concat(new string[] {"yyyy", "yy"}))
{
if (DateTime.TryParseExact(dtText, fmt, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out testDate))
{
nFmt = fmt;
break;
}
}
if (nFmt == null)
return false;
nFmt = nFmt.Replace("dddd", "xxxx"); // Remove Day of the week as not helpful
if (!nFmt.Contains("M")) testDate = testDate.AddMonths(12).AddMonths(-1);
if (!nFmt.Contains("d")) testDate = testDate.AddMonths(1).AddDays(-1);
if (!nFmt.Contains("h") & !nFmt.Contains("H")) testDate = testDate.AddDays(1).AddHours(-1);
if (!nFmt.Contains("m")) testDate = testDate.AddHours(1).AddMinutes(-1);
if (!nFmt.Contains("s")) testDate = testDate.AddMinutes(1).AddSeconds(-1);
return true;
}
这只会将用户未使用的部分设置为最大值。