DateTime.Parse иногда создает исключение FormatException для Pipes - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь отправить DateTime из одного процесса в другой. Моей первой мыслью было отправить DateTime в виде строки и проанализировать строку обратно в полученные значения DateTime. К сожалению, на некоторых машинах я получаю исключение FormatException, хотя строка выглядит хорошо, например, «31.10.2019 12:00:00» (без скрытых символов).

Код выглядит следующим образом, я опущу связь, так какСтрока правильно передана.

var datetimeAsString = SomeDateTime.ToString();      // "31.10.2019 12:00:00"
Pipe.Send(StringToBytes(datetimeAsString));
// Data gets send
var datetimeAsString = BytesToString(receivedBytes); // "31.10.2019 12:00:00"
var datetime = DateTime.Parse(datetimeAsString);

Обратите внимание, что она работает на некоторых машинах.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

TL; DR

При попытке отправить DateTime между различными системами, NOT преобразуйте его в строку, используя ToString () без использования параметра DateTime.ToBinary и DateTime.FromBinary вместо ИЛИ, если вы хотите, чтобы строка указывала культуру, например,

var datetimeAsString = thisDate.ToString(new CultureInfo("en-us"));
DateTime.Parse(datetimeAsString, new CultureInfo("en-us"));

PS: я думаю, что это относится не только к ситуациям, когда вы хотитеобмениваться данными, но также и в других ситуациях, поэтому их следует рассматривать как общий совет.

-

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

Решением было не преобразовать DateTime в строку, а в длинный, используя DateTime. ToBinary метод. Я думаю, что было бы также возможно решить это с CultureInfo.InvariantCulture, но мы думали, что долго было намного чище.

0 голосов
/ 31 октября 2019

Пожалуйста, попробуйте с **DateTime.TryParse** с информацией о культуре, также проверьте минимальная дата или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...