首页 > 解决方案 > 如何在 C# 中以 day.month.year 格式读取日期?

问题描述

我想从控制台读取格式为 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);

标签: c#datetimeparsing

解决方案


两件事情;

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

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

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

这很容易。首先,您需要从开始日期迭代到结束日期。其次,按照我告诉您的方式解析您当前的日期。然后检查你DateTimeDayOfWeek财产。如果是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;
        }
    }
}

在此处输入图像描述


推荐阅读