Tshumore Ответов: 2

Как правильно отформатировать дату в DDMMYYYY


У меня есть программа, которая возвращает ошибки форматирования даты для данных, которые я отправляю. Когда я делаю запрос к конечной точке SOAP, я получаю ошибки форматирования, такие как :
2020-01-30 18:27:22,820|MethodFilter@ff7cd8      |SSException          Throwing com.systemsunion.util.datatype.formatting.InvalidExternalDateLengthException
    Message : The external date value '7252019' is not the correct length.  The correct format is DDMMYYYY.
Stack Trace : 
com.systemsunion.util.datatype.formatting.InvalidExternalDateLengthException: The external date value '7252019' is not the correct length.  The correct format is DDMMYYYY.
	at com.systemsunion.util.datatype.formatting.DateFormatter.getInternalFormat(Unknown Source)


а другой как :
2020-01-30 18:27:22,825|MethodFilter@ff7cd8      |SSException          Throwing com.systemsunion.util.datatype.formatting.InvalidExternalDateException
    Message : The external date value '10302019' is invalid.  The correct date format is DDMMYYYY.
Stack Trace : 
com.systemsunion.util.datatype.formatting.InvalidExternalDateException: The external date value '10302019' is invalid.  The correct date format is DDMMYYYY.
	at com.systemsunion.util.datatype.formatting.DateFormatter.getInternalFormat(Unknown Source)
.

Пример исходных дат которые у меня есть включает в себя :

2019-09-03T00:00:00

2019-09-26T00:00:00

2019-11-26T00:00:00


и Ожидаемый Результат в каждом случае есть :

03092019
26092019
26112019

Что я уже пробовал:

Я попытался отформатировать входные данные в моем источнике, как показано ниже, но я думаю, что логика не преобразуется так правильно, как ожидалось:

string dateSeparator = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.DateSeparator;
                            string dateTime = transaction.Cover_start_date;
                            DateTime dt = Convert.ToDateTime(dateTime);
                            var dateOnlyString = dt.ToShortDateString().Replace(dateSeparator, "");


где
transaction.Cover_start_date
это исходная дата из моей модели. Любая помощь в том, что я могу упустить. Я особенно подозрительно отношусь к первому исключению, где ошибка указывает на преобразованную дату как
'7252019'
. Поскольку это все даты, поступающие из модели, являются действительными датами, и я не совсем уверен, что это было первоначальное значение
'7252019'
когда in был в своей исходной форме, т. е.
YYYY-MM-DDT12:48:15

2 Ответов

Рейтинг:
2

CHill60

Еще один момент, который нужно сделать в дополнение к решению 1 (которое находится на месте). Вы уже использовали

DateTime dt = Convert.ToDateTime(dateTime);
Convert этого следует избегать. Вместо этого используйте методы Parse и ParseExact для типов, в этом случае посмотрите на
- значение datetime.Метод Синтаксического Анализа (Система) | Microsoft Docs[^]
- значение datetime.Метод ParseExact (System) | Microsoft Docs[^]
- значение datetime.Метод TryParse (Система) | Microsoft Docs[^]


Рейтинг:
12

Maciej Los

Коротко И По Существу!

MadMyche

+5 (я просто потерял дар речи от этого)