我想从控制台以day.month.year格式读取日期。
例如,
startDate = 1.05.2016
和
secondDate = 5.05.2016
运行代码并输入代码时,出现System.FormatException。我该怎么读?
var startDate = DateTime.ParseExact(Console.ReadLine(), "dd.m.yyyy", CultureInfo.InvariantCulture);
var endDate = DateTime.ParseExact(Console.ReadLine(), "dd.m.yyyy", CultureInfo.InvariantCulture);
答案 0 :(得分:3)
两件事;
"d"
format specifier而不是dd
,因为您的单位数字天不是 前导零。m
和mm
用了几分钟,而M
和MM
用了几个月。根据您的输入,d.MM.yyyy
似乎是解析的正确格式。
我得到了一个程序(现有源代码),旨在计算 以day.month.year格式给出的两个日期之间的非工作日 (例如,在2015年5月1日至2015年5月15日之间,有5个非工作日– 周六和周日)。我不知道如何从控制台读取它们
那很容易。首先,您需要从开始日期到结束日期进行迭代。其次,按照我告诉您的方式解析您的当前日期。然后检查您的DateTime
的{{3}}。如果是Saturday
或Sunday
,则表示工作日无效。将计数器增加1。
举一个完整的例子;
static void Main(string[] args)
{
DateTime startDate = DateTime.ParseExact(Console.ReadLine(), "d.MM.yyyy", CultureInfo.InvariantCulture);
DateTime endDate = DateTime.ParseExact(Console.ReadLine(), "d.MM.yyyy", CultureInfo.InvariantCulture);
Console.WriteLine($"There are {EachNonWorkingDay(startDate, endDate).Count()} non-working days");
}
private static IEnumerable<DateTime> EachNonWorkingDay(DateTime fromDate, DateTime toDate)
{
for (var day = fromDate.Date; day.Date <= toDate.Date; day = day.AddDays(1))
{
if (day.DayOfWeek == DayOfWeek.Saturday || day.DayOfWeek == DayOfWeek.Sunday)
{
yield return day;
}
}
}
答案 1 :(得分:2)
您正在解析不包含零的日期和包含零的月份。这是模式d.MM.yyyy
有关更多参考,请参见Date And Time Format In C# Programming