IsiR_19 Ответов: 2

Как преобразовать формат даты из нескольких форматов в стандартный формат


Привет ребята

В настоящее время я испытываю некоторые проблемы с моей производственной коробкой.

На моем dev и UAT у меня не было этой проблемы, но у меня есть эта проблема на производственном сервере

Я запускаю службу импорта файлов, которая собирает файлы из FTP-хранилища и импортирует их в БД.

Когда я импортирую данные, я получаю ошибку
Преобразование из строки "1/25/2017 7:59:26 AM" в тип "дата" недопустимо

Я не слишком уверен, в чем может быть проблема

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

В настоящее время я читаю данные из массива, а затем использую следующий код для преобразования даты в стандартный формат
Dim importeddate as datetime
ImportedDate = CDate (поля (количество))
Dim FormattedDate As String = ImportedDate.ToString("dd/MM/yyyy HH:mm:ss")

Я также попытался с помощью типа данных datetime.синтаксический анализ(полей(граф).метод toString)

2 Ответов

Рейтинг:
0

Midi_Mick

Здесь есть две вещи. Во-первых, при чтении даты система будет использовать локальные форматы вашей системы для ее интерпретации. Я заметил, что импортируемая дата находится в американском формате (M/dd/yyyy), где вы выводите данные в британском формате (dd/MM/yyyy). Если ваша система использует британский формат, то она потерпит неудачу при чтении любой американской даты, где день больше 12, и ошибется во всех остальных случаях.

2-я вещь заключается в том, что вы, вероятно, должны использовать DataTime.Метод TryParse для анализа даты. Это вернет true/false в зависимости от успеха или неудачи, а не вызовет исключение.

Таким образом, я бы посмотрел на использование значение datetime.Метод TryParse (String, IFormatProvider, DateTimeStyles, DateTime) (System)[^], что позволяет указать культуру, из которой исходит строковый формат даты, и не создает исключения при сбое.


IsiR_19

Смотрите проблема у меня есть пользователи импортируют несколько типов дат

Таким образом, это может быть британская дата или американская, или может быть гггг/ММ/ДД чч:мм:СС

Вот почему я изначально добавил Cdate in, на моей локальной машине у меня нет этой ошибки, если я Cdate дату в строке он не имеет никаких проблем

Midi_Mick

Вам нужно знать, какой формат импортируется. В противном случае, 2/3/2017-это 2 марта или 3 февраля? И если вы CDate" 1/25/2017 " разбор с британским форматом определен, вы получите ошибку, так как нет 25-го месяца.

Возможно, вы захотите взглянуть на метод TryParseExact (https://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact (v=vs.110). aspx), если вы можете попытаться суммировать, какой будет структура даты.
Примечание: Если вы анализируете без указания формата, он будет использовать любой формат, определенный вашей операционной системой, поэтому вы можете получить разные результаты на разных машинах.

Рейтинг:
0

Peter Leow

Если у вас есть контроль над вводом данных datetime, вы можете использовать CultureInfo.Свойство Инвариантной Культуры (System.Глобализация)[^] в обращении.
Узнайте больше от Избегайте распространенных ошибок глобализации в .NET[^].
Если нет, то вы должны знать формат данных datetime, которые вы получаете, прежде чем выполнять какой-либо значимый синтаксический анализ. В противном случае никакой анализ, даже если он пройдет, не может обещать вам, что это правильная дата-время, которую вы думаете, что получаете.