在ParseExact方法中更改月份和日期

时间:2016-06-01 13:21:57

标签: c#

在我的程序的这种方法中,我从用户那里得到了两个日期(称为fromDatetoDate),稍后在另一种方法中,程序会在购物中心和某些商店中查找销售情况与这两天之间的销售相关的其他财产。

但是,当用户输入11/05/2014时,我不知道原因,但程序会将其更改为05/11/2014。这是我的方法:

static Tuple<DateTime, DateTime> PromptForDateInterval()
{
    CultureInfo provider = CultureInfo.InvariantCulture;

    Console.WriteLine("From Date : (dd/MM/yyyy)");
    DateTime fromDate = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy", provider);

    Console.WriteLine("To Date   : (dd/MM/yyyy)");
    DateTime toDate = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy", provider);

    Console.WriteLine(fromDate.ToString());

    return Tuple.Create<DateTime, DateTime>(fromDate, toDate);
}

非常感谢:)

2 个答案:

答案 0 :(得分:1)

当你这样做时

DateTime fromDate = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy", provider);

DateTime toDate = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy", provider);

您创建了两个日期时间对象,这些对象将使用指定的格式和提供程序使用解析器返回的内容进行初始化。

使用.ToString()方法将datetime对象写入控制台时。

Console.WriteLine(fromDate.ToString());

你隐式使用机器的区域,但你会将日期时间对象很好地定义为元组。

如果您正在查看日期时间对象的Day, Month, Year属性,那么您将获得所需的内容。

稍后编辑:如果您需要创建一个仅包含日期字符串表示形式的元组,则需要Tuple<string, string>并添加到该元组fromDate.ToString(format)toDate.ToString(format) < / p>

有关此处的格式列表:https://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx,但您也可以创建自定义格式。

我不会返回Tuple<string, string>而不是Tuple<Datetime, Datetime>,因为如果您正在查看返回的对象(Tuple<string, string>),则不会知道格式。

答案 1 :(得分:0)

您用于解析日期的格式未存储在DateTime变量中。要以您解析它的相同格式输出它,只需再次使用相同的格式:

fromDate.ToString("dd/MM/yyyy")

所以不要担心,DateTime中存储的数据是正确的,您只是使用它&#34;错误&#34;在Console.WriteLine