如何在C#中读取day.month.year格式的日期?

时间:2019-01-13 12:20:30

标签: c# datetime parsing

我想从控制台以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);

2 个答案:

答案 0 :(得分:3)

两件事;

  1. 您需要使用the "d" format specifier而不是dd,因为您的单位数字天不是 前导零。
  2. 自定义日期和时间说明符区分大小写。 mmm用了几分钟,而MMM用了几个月。

根据您的输入,d.MM.yyyy似乎是解析的正确格式。

  

我得到了一个程序(现有源代码),旨在计算   以day.month.year格式给出的两个日期之间的非工作日   (例如,在2015年5月1日至2015年5月15日之间,有5个非工作日–   周六和周日)。我不知道如何从控制台读取它们

那很容易。首先,您需要从开始日期到结束日期进行迭代。其次,按照我告诉您的方式解析您的当前日期。然后检查您的DateTime的{​​{3}}。如果是SaturdaySunday,则表示工作日无效。将计数器增加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;
        }
    }
}

DayOfWeek property

答案 1 :(得分:2)

您正在解析不包含零的日期和包含零的月份。这是模式d.MM.yyyy

有关更多参考,请参见Date And Time Format In C# Programming