/ / конвертиране на низ във формат DateTime - c #, datetime

конвертиране на низ във формат DateTime - c #, datetime

Опитвам се да разбера 09/01/2015 00:00:00 формат yyyy-MM-ddThh:mm:ssZ използвайки следния метод:

DateTime.ParseExact("09/01/2015 00:00:00", "yyyy-MM-ddThh:mm:ssZ", (IFormatProvider)CultureInfo.InvariantCulture);

Но аз ще получа String was not recognized as a valid DateTime

Може ли някой да ми каже защо? аз вярвам 09/01/2015 00:00:00 е валиден формат DateTime?

Отговори:

2 за отговор № 1

от DateTime.ParseExact

Преобразува определеното низово представяне на дата и час в него Еквивалент на DateTime. Форматът на низовото представяне трябва съвпадат точно определен формат или се изхвърля изключение.

Във вашия случай, те не са.

Предполагам, че си 09 част е ден номера, можете да използвате dd/MM/yyyy HH:mm:ss вместо това.

var dt = DateTime.ParseExact("09/01/2015 00:00:00",
"dd/MM/yyyy HH:mm:ss",
CultureInfo.InvariantCulture);

От CultureInfo вече сечива IFormatProvider, не е необходимо изрично да я хвърляте.

Не разбирам това. Значи това означава, че първо трябва да поправя струната си и второ, мога да направя ParseExact (). Мислех, че ParseExact може обработване на дадения низ ...

ParseExact не е магически метод, който може да анализира който и да е форматиран низ, който добавихте. Може да се справи само ако низът и форматът ви перфектно съвпадат въз основа на настройките на културата, които сте използвали.


1 за отговор № 2

Опитайте този код:

var text = "09/01/2015 00:00:00";
var format = "dd/MM/yyyy HH:mm:ss";
var dt = DateTime.ParseExact(text, format, (IFormatProvider)CultureInfo.InvariantCulture);

Ще забележите, че форматът трябва структурно да съвпада с текста, който се опитвате да анализирате точно - оттук ParseExact име за метода.


0 за отговор № 3

Форматът не съвпада, трябва да промените 09/01/2015 в 2015-01-09 илиyyyy-MM-dd част dd/MM/yyyy.


0 за отговор № 4

Методът ParseExact не е краен методпреобразува всеки формат на дата в друг, просто е да се анализира даден низ в датата, използвайки предоставения формат. Така, ако вашият inout не съвпада с този формат, методът ще изхвърли това изключение.

Като datetime е вътрешно само номер тамне е необходимо изобщо да конвертирате един формат в друг, затова, доколкото знаете формата на входа, можете да създадете дата от него, която няма нищо общо с каквото и да е форматиране, което може да ви е необходимо, когато искате да отпечатате тази дата до изход. В този случай ще имате нужда от форматиране.


0 за отговор № 5

Както повечето хора са заявили, че грешката идваот факта, че датата под формата на низ не съответства на формата, в която казвате, че е. Вие казвате, че 09/01/2015 00:00:00 е във формат "гггг-ММ-ддтч: мм: ssZ ", което не е така, следователно грешката. За да коригирате това, трябва или да промените формата, в който е въведен низът, или по-вероятно да промените формата, в който казвате, че датата е. Така че променете" yyyy-MM- dd: Th: mm: ssZ "до" dd / MM / yyyy HH: mm: ss ".

В по-дългосрочен план как се стига до вастази дата? Възможно ли е форматът да се променя (въвеждане, но потребителя)? Ако е така, може да е по-добре да се опитате да избегнете изхвърлянето на грешката и да се справяте по-добре с нея TryParseExact, За да се възползвате от това най-добре, аз обикновено извеждам Nullable DateTime и след това проверявам дали е нула. Ако не правите това, тогава, ако разборът не успее, просто ще направи изходната дата на минималната стойност.

Нещо подобно трябва да работи:

public DateTime? StringToDate (string dateString, string dateFormat)
{
DateTime? dt;
DateTime.TryParseExact(dateString, dateFormat, null, System.Globalization.DateTimeStyles.None, out dt);
return dt;
}

След това можете да го използвате по следния начин:

DateTime? MyDateTime = StringToDate("09/01/2015 00:00:00", "dd/MM/yyyy HH:mm:ss");

if(MyDateTime != null)
{
//do something
}

0 за отговор № 6

Друг лесен начин да направите това ...

var dt = Convert.ToDateTime(Convert.ToDateTime("09/01/2015 00:00:00").ToString("yyyy-MM-ddThh:mm:ssZ"))