c # .net основная разница в формате даты MMM на Windows и Linux - PullRequest
1 голос
/ 08 апреля 2019

Я столкнулся с проблемой.Мне нужно разобрать дату в определенном формате ddMMMyy в кириллице.Когда я запускаю ядро ​​.net в Windows, дата 08АПР19 правильно анализируется в 2019-04-08, но выдает исключение при разборе его на сервере Linux. Исключение: строка '08 АПР19 'не была распознана как действительнаяDateTime.

Код вызывает исключение следующим образом:

DateTime.ParseExact(myDateVar, "ddMMMyy", CultureInfo.CreateSpecificCulture("ru-RU"));

Затем я попытался вывести следующее в Windows и Linux:

DateTime.Now.ToString("ddMMMyy", CultureInfo.CreateSpecificCulture("ru-RU"))

вывод в Windows: 08апр19

и Linux: 08Апр.19 В Linux есть странная точка

В моем понимании формат жестко закодирован в .net framework, и мне интереснопочему это зависит от платформы.Итак, вопрос в том, почему на машинах Win и Linux есть разница, и кто вызывает эту проблему?

1 Ответ

0 голосов
/ 08 апреля 2019

Когда вы вызываете функцию или метод любого пространства имен в .NET Framework (то же самое с Core), которое связано с операционной системой, .NET Framework вызывает API-функции операционной системы. Затем .NET получает значение, возвращаемое операционной системой, и возвращает его вам. По этой причине в разных операционных системах вы получите разные результаты.

Например, предположим, что GetProccessorType () (просто пример) является функцией DLL ОС WIndows, а get_cpu_type () (просто пример) является той же функцией для Linux. Оба они возвращают тип процессора. Но предположим, что GetProcessorType возвращает 0, если процессор 32-разрядный, и 1, если процессор 64-разрядный. Но в Linux get_cpu_type возвращает 32, если он 32-битный, и 64, если он 64-битный.

Теперь предположим, что в .NET Framework есть функция GetCPUMode () (фактически, в .NET Framework ее нет, просто пример) как в Linux, так и в Windows (вы должны знать это уже).

При вызове функции в Windows

....
public static void Main(){
    Console.WriteLine(GetCPUMode());
}
....

Тогда, если ваш компьютер 64-битный, то 1 будет отображаться как вывод в Windows и 64 как вывод в Linux. Я думаю, вам придется сделать вторичный метод синтаксического анализа, чтобы удалить точку. Вы можете посмотреть методы обработки строк для этой цели.

...