C # DateTime.ParseExact выдает «Строка не была распознана как действительное значение DateTime.» - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь отладить, и он говорит: «Строка является / не была распознана как действительное значение DateTime», я нашел около 20 сообщений об этом на этом веб-сайте и пробовал каждую из них, ни одна из них не имела никакого значения, или это не далоошибка «0 не является допустимым значением».Что я делаю неправильно?Поскольку он не показывает никаких ошибок, но останавливает отладку каждый раз и выдает ошибку.

dToday2 и cExpiration Я хочу преобразовать строку в значение DateTime, а затем сравнить их в нижней строке кода.

Обратите внимание, что cExpiration происходит от textBox9.text, который является прямым потоком readAllText из сохраненного файла, поэтому я хочу, чтобы он проанализировал сохраненный файл в DateTime.

            string cheatExpiration = System.IO.File.ReadAllText(@"C:\xWQcixf07xES5yf5V5A6\UKI9nRuJgZA611zQCyIq.txt");
            DateTime dateToday = DateTime.Today;
            string dateToday2 = DateTime.Today.ToString();
            textBox8.Text = dateToday2;

            textBox9.Text = cheatExpiration;
            DateTime cExpiration = DateTime.ParseExact(textBox9.Text, "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
            DateTime dToday2 = DateTime.ParseExact(dateToday2, "yyyy/MM/dd HH:mm", CultureInfo.InvariantCulture);

            if (dToday2 < cExpiration)
            {

            }

Я ожидаю, что он проанализирует textBox9.текст как например 2019/01/17 01:01, но я не знаю, потому что у меня даже не было опыта работы с ним, поэтому я точно не знаю.

Обновление

enter image description here

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Ваша проблема точно такая, как мы думали, ваша дата и время не в формате "yyyy/MM/dd HH:mm", это IS "yyyy/MM/dd HH:mm\r\n"

Так как мы можем это исправить?Мы можем использовать метод String.Trim, который удалит все пробелы или возврат каретки из строки

DateTime cExpiration = DateTime.ParseExact(cheatExpiration.Trim(), "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
0 голосов
/ 01 января 2019

Вы открываете себя для других ошибок синтаксического анализа, преобразовывая сегодняшнюю дату в строку, а затем снова пытаетесь преобразовать ее обратно в DateTime.Это потому, что вызов ToString () приведет к разным выводам в разных регионах и / или культурах.Вместо этого просто сравните DateTime.Today напрямую:

// this includes the Trim() suggested by the others
string cheatExpiration = System.IO.File.ReadAllText(@"C:\xWQcixf07xES5yf5V5A6\UKI9nRuJgZA611zQCyIq.txt").Trim();
DateTime cExpiration = DateTime.ParseExact(cheatExpiration, "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
if (DateTime.Today < cExpiration)
{

}
0 голосов
/ 01 января 2019

Вам необходимо сузить проблему между вводом, который работает, и вводом, который не работает.Например, вот ввод, который отлично работает:

var dt = DateTime.ParseExact("2019/01/17 01:01", "yyyy/MM/dd HH:mm", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("{0}", dt);

Начиная с этого, добавляйте больше своего собственного кода, пока он не сломается, а затем сузьте точно, какие изменения вызвали его разрыв.

...