C# 试图编写自己的日期程序,需要检查C中指定月份的最大日期#
我正试图用C#编写自己的日期程序,我遇到的问题是,当用户输入日期(例如2-31)时,程序允许它。我想创建一个条件,在这里我可以匹配输入的月份,然后从中查看该月份的日期是否可用。我在下面使用这段代码,但它会为任何一天(比如10月10日)抛出异常,这应该是正确的。如果我把它注释掉,日期是有效的,但它不会检查是否与月份相符C# 试图编写自己的日期程序,需要检查C中指定月份的最大日期#,c#,C#,我正试图用C#编写自己的日期程序,我遇到的问题是,当用户输入日期(例如2-31)时,程序允许它。我想创建一个条件,在这里我可以匹配输入的月份,然后从中查看该月份的日期是否可用。我在下面使用这段代码,但它会为任何一天(比如10月10日)抛出异常,这应该是正确的。如果我把它注释掉,日期是有效的,但它不会检查是否与月份相符 public int Day { get { return day; } priv
public int Day
{
get
{
return day;
}
private set
{
//int[] daysPerMonth = { 0, 31, 28, 31, 30, 31, 30,
// 31, 31, 30, 31, 30, 31 };
//// check if day in range for month
//if (value > 0 && value <= daysPerMonth[Month])
// day = value;
//else // day is invalid
// throw new ArgumentOutOfRangeException(
// "Day", value, "Day out of range for current month/year");
if (value > 0 && value <= 31)
day = value;
else
throw new ArgumentOutOfRangeException("Day", value, "Day must be 1-31");
}
}
public static class DateHelper
{
private int[] daysInMonth = new[] { 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
public static bool IsLeapYear(int year)
{
// TODO: taken from wikipedia, can be improved
if (year % 400 == 0)
return true;
else if (year % 100 == 0)
return false;
else if (year % 4 == 0)
return true;
return false;
}
public static bool GetDaysInMonth(int year, int month)
{
// TODO: check for valid ranges
var days = daysInMonth[month - 1];
if (month == 2 && IsLeapYear(year))
days++;
return days;
}
}
公共国际日
{
得到
{
回归日;
}
专用设备
{
//int[]daysPerMonth={0,31,28,31,30,31,30,
// 31, 31, 30, 31, 30, 31 };
////检查日期是否在月份范围内
//如果(value>0&&value 0&&value您必须知道用户选择的月份以及年份(以正确处理闰年)
必须是这样的:
public int Day
{
get
{
return day;
}
private set
{
var endOfMonth = new DateTime(year, month, 1).AddMonths(1).AddDays(-1);
if (value > 0 && value <= endOfMonth.Day)
day = value;
else
{
var message = string.Format("Day must be between {0} and {1}", 1 endOfMonth.Day);
throw new ArgumentOutOfRangeException("Day", value, message);
}
}
}
public int Day
{
get
{
return day;
}
private set
{
var endOfMonth = DateHelper.GetDaysInMonth(year, month);
if (value > 0 && value <= endOfMonth)
day = value;
else
{
var message = string.Format("Day must be between {0} and {1}", 1 endOfMonth);
throw new ArgumentOutOfRangeException("Day", value, message);
}
}
}
然后你可以这样使用它:
public int Day
{
get
{
return day;
}
private set
{
var endOfMonth = new DateTime(year, month, 1).AddMonths(1).AddDays(-1);
if (value > 0 && value <= endOfMonth.Day)
day = value;
else
{
var message = string.Format("Day must be between {0} and {1}", 1 endOfMonth.Day);
throw new ArgumentOutOfRangeException("Day", value, message);
}
}
}
public int Day
{
get
{
return day;
}
private set
{
var endOfMonth = DateHelper.GetDaysInMonth(year, month);
if (value > 0 && value <= endOfMonth)
day = value;
else
{
var message = string.Format("Day must be between {0} and {1}", 1 endOfMonth);
throw new ArgumentOutOfRangeException("Day", value, message);
}
}
}
公共国际日
{
得到
{
回归日;
}
专用设备
{
var endOfMonth=DateHelper.GetDaysInMonth(年,月);
如果(value>0&&value如果必须使用DateTime来完成,则可以使用
DateTime.DaysInMonth(Year, Month);
你想不使用内置的datetime对象做些什么吗?我已经编写了自己的日期程序,我没有使用C#的类。它应该非常简单,现在我不想解释闰年,有什么方法可以做到这一点吗?@错误的建议为什么你要尝试重新发明轮子?正确的日期处理是必要的实际上很难做到正确。我强烈建议您坚持使用现有的DateTime
类。如果(年份%4==0){这是闰年}否则{这不是}@VishweshwarKapse没有..不是说这不能完成,而是完全没有必要。我刚开始自学编程,这是我正在阅读的这本书中的一个练习,但这本书没有答案,我想通过所有这些练习从这本书中获得最大的好处。+1哈。我忘了那个方法存在.My.AddMonths(1).AddDays(-1)
技巧是对SQL的一种回溯。