Опитвам се да разбера 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. Форматът на низовото представяне трябва съвпадат точно определен формат или се изхвърля изключение.
Във вашия случай, те не са.
Предполагам, че си 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"))