Eranga Dayarathne Ответов: 2

При отладке моего приложения C# windows преобразование даты и времени работает. Но когда он развернут он не работает


Я получаю дату истечения срока действия из XML - файла и конвертирую ее в datetime. это работа в режиме отладки. но после развертывания исходного кода он возвращает ошибку.

общественные LabelInfo ParseLabelsingalData(руководство перечень)
{
LabelInfo labelinfor = новый LabelInfo();

labelinfor.ID = Llist.Атрибуты["Имя"].Значение;
labelinfor.Название = Копилке.Атрибуты["Имя"].Значение;

labelinfor.ExpiryDate = конвертировать.ToDateTime(Llist.Атрибуты["ExpiryDate"].Value);
}

Я получаю дату из xml типа "31/01/2018"

ошибка возврата - строка не распознана как в валиде типа datetime

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

Я попытался преобразовать дату и время labelinfor.ExpiryDate = Convert.ToDateTime(Llist.Атрибуты["ExpiryDate"].Value);

Slacker007

Решение 1 (и 2) - это ответы на вашу проблему. Обратите внимание, что при использовании TryParse вы должны использовать его в операторе "If", что означает, что вам нужно будет написать дополнительный код для обработки сценария плохой даты - что вы делаете, когда дата не может быть проанализирована.

2 Ответов

Рейтинг:
2

OriginalGriff

Проблема почти наверняка заключается в том, что формат DateTime, используемый на вашей машине разработки, не совпадает с форматом на производственной машине - и преобразуется.ToDateTime использует текущую настройку компьютера в качестве формата для процесса преобразования.

Я настоятельно рекомендую вам забыть все функции преобразования и в будущем посмотреть на TryParse или TryParseExact.

В этом случае я бы проверил ваши XML-данные и использовал DateTime.TryParseExact точно указывает формат, который будет содержать файл, поэтому вы никоим образом не зависите от настроек машины.


Eranga Dayarathne

Так что в данном случае это работа. спасибо. но когда я снова равняю этот формат переменной datetime, она показывает формат MM/dd/yyyy.

это тот самый Вахи, который я сделал,

формат строки = "ДД/ММ/гггг";

если (дата-время.TryParseExact(dtime, format,
Система.Глобализация.CultureInfo.Инвариантная Культура, Стиль Времени И Даты.Нет, вне Темдата))
{
labelinfor.MinimumExpiryDate = Temdate;
}

Системный журнал.WriteLog(MSLogLevel.Информационный, "Trace ExpiryDate -" + labelinfor.ExpiryDate);


-labelinfor.MinimumExpiryDate - это переменная datetime"

private DateTime expiryDate = DateTime.Now;

public DateTime ExpiryDate
{
получить
{
вернуться expiryDate;
}
набор
{
expiryDate = значение;
}
}


почему это снова меняется, когда я равен datetime ?

OriginalGriff

Потому что значение DateTime не имеет формата - оно хранится как число тиков с фиксированного момента времени и не становится годом, месяцем и днем, пока не будет преобразовано обратно в строку для представления пользователю.
После чего если вы не укажете формат он снова использует текущую настройку машины для предоставления формата даты который по его мнению должен быть удобен пользователю!

Рейтинг:
1

Richard MacCutchan

Не используйте обменять на такие вопросы, использовать значение datetime.Метод tryparse[^Это позволяет лучше контролировать формат даты. Помните, что представление даты варьируется в зависимости от культуры; например, в американском формате даты 31/01/2018 недопустимо, так как 31-это поле месяца.


Eranga Dayarathne

Так что в данном случае это работа. спасибо. но когда я снова равняю этот формат переменной datetime, она показывает формат MM/dd/yyyy.

это тот самый Вахи, который я сделал,

формат строки = "ДД/ММ/гггг";

если (дата-время.TryParseExact(dtime, format,
Система.Глобализация.CultureInfo.Инвариантная Культура, Стиль Времени И Даты.Нет, вне Темдата))
{
labelinfor.MinimumExpiryDate = Temdate;
}

Системный журнал.WriteLog(MSLogLevel.Информационный, "Trace ExpiryDate -" + labelinfor.ExpiryDate);


-labelinfor.MinimumExpiryDate - это переменная datetime"

private DateTime expiryDate = DateTime.Now;

public DateTime ExpiryDate
{
получить
{
вернуться expiryDate;
}
набор
{
expiryDate = значение;
}
}


почему это снова меняется, когда я равен datetime ?

Richard MacCutchan

Это не меняется. Дата-Время-это всего лишь число, но то, как оно отображает содержимое, будет зависеть от окружающей среды и текущей культуры.