#c# #datetime #asp.net-core
Вопрос:
В нашем веб-приложении мы поддерживаем испанский язык. При сборе информации мы разрешаем пользователям вводить дату в формате дд/ММ/гггг для веб-сайта испанской версии и ММ/дд/гггг для английской версии веб-сайта.
После сбора этой информации мы отправляем весь объект на обработку микрослужбам. Здесь я пытаюсь преобразовать dd/MM/гггг в MM/dd/гггг перед отправкой информации из моего веб-приложения.
У меня возникли проблемы с преобразованием дд/ММ/гггг в ММ/дд/гггг.
шаги, которые я выполнил для преобразования формата:
Ввод данных пользователем: 26/02/2020
string effDate = effectivePolicyDate.ToString("MM/dd/yyyy", CultureInfo.CreateSpecificCulture("en-US"));
Эффективная политика-это ввод данных пользователем. из приведенного выше кода я получаю EffDate = «26.02.2020»(Получаю ожидаемый результат в строке.)
Мне нужно отправить дату в формате даты и времени, а не в строке, поэтому я попытался преобразовать ее в дату и время ниже.
var date = DateTime.ParseExact(effDate, "MM/dd/yyyy", CultureInfo.InstalledUICulture);
Здесь я пытаюсь проанализировать дату, на дату я получаю 26/02/2020(дд/ММ/гггг), но не ММ/дд/гггг.
var date2 = DateTime.Parse(effDate);
Над строкой выбрасывается исключение ниже.
DateTime.Parse("2/26/2021");
'DateTime.Parse("2/26/2021")' threw an exception of type 'System.FormatException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233033
HelpLink: null
InnerException: null
Message: "String '2/26/2021' was not recognized as a valid DateTime."
Source: "System.Private.CoreLib"
StackTrace: " at System.DateTimeParse.Parse(ReadOnlySpan`1 s, DateTimeFormatInfo dtfi, DateTimeStyles styles)rn at System.DateTime.Parse(String s)"
TargetSite: {System.DateTime Parse(System.ReadOnlySpan`1[System.Char], System.Globalization.DateTimeFormatInfo, System.Globalization.DateTimeStyles)}
DateTime.Parse("26/2/2021");
Я не нашел способа преобразовать формат даты из dd/MM/гггг в MM/dd/гггг, я отправил дату как есть и другие приложения для обработки. Мне любопытно узнать, есть ли возможность конвертировать формат. Мне удалось преобразовать в строку, но не удалось преобразовать свойство даты(ММ/дд/гггг) в дату.
Комментарии:
1. «Мне нужно отправить дату в формате даты и времени, а не в строке, поэтому я попытался преобразовать ее в дату и время ниже». — Что вы имеете в виду под этим? Отправить куда?
2. Один из вариантов — отправить дату в однозначном формате , например
effectivePolicyDate.ToString("s")
— который будет выводиться2021-07-15T00:00:00
-и который затем может быть проанализирован обратно к исходной дате, простоDateTime.Parse
не нужно указывать культуру.3. @RyanWilson, мое приложение взаимодействует с другими микросервисами, и я отправляю эту дату-время в объект вместе с другой информацией.
Ответ №1:
Ваш вопрос несколько неясен, но, похоже, в этом var date2 = DateTime.Parse(effDate);
и заключается проблема. Я добавил два примера использования DateTime.Parse
в приведенном ниже тесте, надеюсь, это поможет.
[Test]
public void DateTests()
{
var expectedDate = new DateTime(2020, 2, 26);
var date1 = DateTime.Parse("2/26/2020", new CultureInfo("en-US"));
Assert.AreEqual(expectedDate, date1);
var date2 = DateTime.Parse("26/2/2020", new CultureInfo("es-ES"));
Assert.AreEqual(expectedDate, date2);
}