2016-06-01 4 views
0

В этом методе моей программы я беру две даты от пользователя (fromDate и toDate), позже в другом методе программа находит продажи в торговом центре и некоторых других связанных с ним свойствах с продажами между этими двумя днями.Изменяет месяц с днем ​​в методе ParseExact

Однако, когда пользователь вводит, например, 11/05/2014, я не знаю, почему, но программа меняет его на 11.05.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); 
} 

спасибо :)

+1

Вы имеете в виду «изменяет» его при отображении его пользователю в 'Console.WriteLine (fromDate.ToString())'? То есть оно отображается в формате региональных настроек вашего компьютера. – Rhumborl

+0

Действительно. Спасибо @Rhumborl. Теперь я изменил его. Тогда моя ошибка не связана с этим, еще раз спасибо :) –

ответ

1

Когда вы

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

и

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

вы создать два объекта даты-времени, которые будут инициализированы с что парсер вернется с использованием указанного формата и поставщика.

Когда вы пишете объект datetime на консоль, используя метод .ToString().

Console.WriteLine(fromDate.ToString()); 

u're неявно используя область вашей машины, но вы будете иметь объекты, определенные даты-времени хорошо в кортеже.

И если вы ищете свойства ваших объектов datetime, вы получите то, что вам нужно.

Позже изменения: Если вам нужно создать кортеж, который будет иметь только строковое представление даты Вашего понадобится Tuple<string, string> и добавить к этому кортежей fromDate.ToString(format) и toDate.ToString(format)

Для списка форматов здесь: https://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx, но вы также можете создавать собственные форматы.

Я не верну Tuple<string, string> вместо Tuple<Datetime, Datetime>, потому что если вы смотрите на возвращенный объект (Tuple<string, string>), вы не будете знать формат.

+0

Затем мне нужно создать Tuple с более короткими версиями объектов DateTime –

+0

Да. Пожалуйста, см. Мое более позднее правление о ваших мыслях. –

+0

Я не могу использовать строку, потому что формат моих данных - Date. Я имею в виду, по крайней мере, я буду форматировать эту строку в DateTime –

0

Формат, используемый для анализа даты, не сохраняется в переменной DateTime. Для вывода его в том же формате, который вы разобран, просто использовать один и тот же формат снова:

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

Так что не волнуйтесь, данные, хранящиеся в DateTime правильно, вы просто использовали его «неправильно» в Console.WriteLine.

Смежные вопросы