|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Я понимаю, что в .Net полно инструментов и счас возникнет желание дать мне кучу ненужных советов, но мне нужен ответ на 2 конкретных вопроса. 1) Как получить список текущих системных форматов ("Краткая дата") ? На ЭТОМ компьютере, как он сейчас регионально настроен. Оно отображается в комбобоксе в Панель Управления -> Часы и регион - Изменение форматов даты времени и чисел. Т.е. мне нужно получить ровно тот набор строк, что отображается в комбобоксе в том самом виде как оно там отображается. Для разных региональных настроек этот набор форматов разный (см. картинка). 2) Как зная выбранную "строку формата" (одна из полученного в (1)) привести As Date согласно оному? Ясен пень, нетовские доки я читать пытался. Но пока не нашел четкого ответа на свой вопрос, особенно на первый. Т.е. тупо предложить несколько моих субъективных "MM-dd-yyyy","yyyy-MM-ddd" неохота, надо дать выбор из "родных для юзера", т.е. получить этот родной набор как это делают винды в зависимости от выбранного язык/регион. Дальше еще один "вопрос" (? не могу сформулировать как вопрос, видимо надо поприкидывать). Полученная дата будет использоваться в имени файла, т.е. нельзя использовать / \ (соотв. : для времени). Т.е. все / \ в этих строках надо заменять тупо на - (по поводу времени пока не решил, но скорее тоже на -). Пробелы, точки, вставки типа 'г.' допускаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2019, 23:52 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77, В .NET есть метод, возвращающий все возможные форматы для текущего даты/времени. https://docs.microsoft.com/ru-ru/dotnet/api/system.datetime.getdatetimeformats?view=netframework-4.8#System_DateTime_GetDateTimeFormats_System_Char_ Собственно, это относится к форматированию, которое предоставляет фреймворк из коробки. Что там отображается в конкретном окошке настроек Windows относится к реализации этого самого окошка, используемому WinAPI, а не к .NET. Ещё можно дизассемблить методы DateTime, и чё-нить нарыть о том, как именно это реализовано. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2019, 01:36 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
hVostt, вряд ли мне нужны здесь "API". Вот оно вроде. GetAllDateTimePatterns(Char) Список кратких дат (As String()): Код: vbnet 1. 2. 3. 4. 5.
Для Русский россия напр. будет: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
(аккурат то что в окошке на картинке) Аналогично 't' -краткое время 'T' -полное (с секундами). Я вот изучаю поведение одной программы (которая делает по сути то чего хочу), она почему-то для любой локали добавляет еще 3 формата к этому списку: yyyy-MM-dd dd-MM-yyyy MM-dd-yyyy Эдакая отсебятина? Задача в общем-то простая 1) юзеру предлагается список паттернов (разумных для его "региона") 2) юзер выбирает один из них 3) файлы содержат дату с выбранным патерном Now.ToString("pattern") Но надо сделать аккуратно, вот и думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2019, 02:28 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77вряд ли мне нужны здесь "API". Нужны, если ты привязываешься к окошку, скрин на который кидал. Дмитрий77Вот оно вроде. GetAllDateTimePatterns(Char) Сомнительная польза для конечного юзера, который хочет увидеть конкретно, как будет выглядеть время, а не набор тарабарщины из "паттернов", на который пользователю наплевать с высокой колокольни. Если же юзер разбирается в паттернах, ему нужно дать возможность напистаь свой паттерн, какой он хочет. Дмитрий77Задача в общем-то простая 1) юзеру предлагается список паттернов (разумных для его "региона") 2) юзер выбирает один из них 3) файлы содержат дату с выбранным патерном Now.ToString("pattern") Но надо сделать аккуратно, вот и думаю. Эта простая задача решена уже 20 лет назад. Открой окошко с настройкой форматы даты/времени в экселе. Собственно я именно метод, решающий эту задачу и привёл выше. Для любой локали можно предложить один на выбор из GetDateTimeFormats(Char format), где format один из вариантов «d», «D», «f», «F», «g», «G», «m», «o», «r», «s», «t», «T», «u», «U» ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2019, 02:41 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
hVosttДмитрий77вряд ли мне нужны здесь "API". Нужны, если ты привязываешься к окошку, скрин на который кидал. Дмитрий77Вот оно вроде. GetAllDateTimePatterns(Char) Ну дык CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns("d") и отдает ровно тот набор строк, что в комбобоксе на скрине. hVosttСомнительная польза для конечного юзера, который хочет увидеть конкретно, как будет выглядеть время, а не набор тарабарщины из "паттернов" Так в том же окошке (скрин на который кидал), при выборе dd.MM.yyyy тут же внизу сразу и выводится Example: 13.07.2019 hVosttЕсли же юзер разбирается в паттернах, ему нужно дать возможность напистаь свой паттерн, какой он хочет. Опыт показывает, что этого как раз делать не надо. Он уж "захочет", а потом еще и претензии предъявит. Не стоит в коммерческих продуктах давать возможность стрелять в ногу. Ну, по сути с теорией вроде как разобрался. Осталось сделать аккуратную практическую реализацию (на что большая часть времени как правило и уходит). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2019, 14:32 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77Ну дык CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns("d") и отдает ровно тот набор строк, что в комбобоксе на скрине. Мне кажется, несколько больше :) Дмитрий77Опыт показывает, что этого как раз делать не надо. Он уж "захочет", а потом еще и претензии предъявит. Не стоит в коммерческих продуктах давать возможность стрелять в ногу. Для этого существует валидация :) Для непродвинутого пользователя это выглядит примерно так: 简单的约会 - 14.07.2019 完整日期 - 14.07.2019 12:32:23 :) Дмитрий77Ну, по сути с теорией вроде как разобрался. Осталось сделать аккуратную практическую реализацию (на что большая часть времени как правило и уходит). Это главное ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2019, 23:30 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
hVosttДмитрий77Ну дык CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns("d") и отдает ровно тот набор строк, что в комбобоксе на скрине. Мне кажется, несколько больше :) Со спецификатором "d" (краткая дата) вроде как то же самое, ну я поигрался - различий вроде не заметил. Если только .Net использует свою кухню, а не те же "API" - но в любом случае эти различия если и есть, будут незначительны, и вариант приемлимый. Мне в любом случае придется чуть коверкать "оригинал", ибо все "dd/MM/yyyy" надо заменять на "dd-MM-yyyy" и убирать дубли если есть (/ не может быть в имени). Ну и разумно всегда добавить к любому нац. списку (если их нет) yyyy-MM-dd dd-MM-yyyy MM-dd-yyyy (имена файлов, и предполагаю эти варианты удобны для сортировки) Надо делать, а потом уж смотреть что получилось и допиливать если где лоханулся (теория этих дата-время уж очень обширна и занудна). Например еще такой вариант надо отрабатывать. Допустим юзер выбрал "формат", а потом переключил локаль. Какой формат брать (если выбранный патерн так или иначе не годен для новой локали)? Я думаю быстрая проверка и если "выбранного" нет в списке, брать первый из текущего списка. Кстати, для "время", как формат разумно коверкнуть, чтоб вставлять в "имя файла"? Обычно: 5:25:15 PM 18:12 -так "низя". Я думаю разумно будет: 5-25-15 PM 18-12 Точка-разделитель используется если память не изменяет только в италии, но 5.25.15 PM явно хужее выглядит. Подчеркивание тоже как-то некрасиво. Я думаю, ' - ' оптимальная замена для всего непотребного. ===== P.S Вообще мне обычно хватает 1) Для отображения/сохранения времени в строке, грубо Now().ToString 2) Для валидации что строка это дата IsDate(строка) 3) И далее для получения даты CType(строка, Date) На любой одной конкретной локали это чудесно всегда работает из коробки (имеется в виду оперативное отображение и т.п.). Ну, если хранение в БД, оно там понятно хранится как Date. Если надо что-то точное (чтоб уж точно положить взять без ошибок), то выделяем MM, dd, yyyy, mm, ss и т.п. из Date и храним в своем внутреннем формате проги. Это так, к слову. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 01:36 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77, Так-то для файлов абсолютно правильно независимо от локали и культуры формат даты выбирать, удобный для сортировки, а именно: yyyy-MM-dd Касательно времени, тоже самое. Не имеет значение, используется ли в культуре AM/PM, имя файла должно содержать HH:mm HH:mm:ss И обязательно после даты. Просто потому, что так удобно работать с файлами. В общем-то так и принято делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 02:03 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77На любой одной конкретной локали это чудесно всегда работает из коробки (имеется в виду оперативное отображение и т.п.). Мне кажется основной косяк здесь в ожиданиях, что локаль нужна там, где она на самом деле не нужна и даже довольно таки вредна. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 02:04 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
hVosttДмитрий77, Так-то для файлов абсолютно правильно независимо от локали и культуры формат даты выбирать, удобный для сортировки, а именно: yyyy-MM-dd Касательно времени, тоже самое. Не имеет значение, используется ли в культуре AM/PM, имя файла должно содержать HH:mm HH:mm:ss И обязательно после даты. Убедил, добавил эти универсальные "форматы", только для времени HH-mm HH-mm-ss ' : ' -низя hVosttЕсли же юзер разбирается в паттернах, ему нужно дать возможность напистаь свой паттерн, какой он хочет.Пусть пишет, переставляет местами как хочет, %переменные% я ему предоставляю, а вот стрелять по ногам по форматам даты и времени направо и налево, ну не дам не дам, пусть выбирает "из разумного для данной местности". В общем начал с "GUI выбора шаблона", код и картинка типа такие намечаются: (на первое место в список комбо как раз подставляются системно выбранные "короткая дата" и "короткое время", они же и предлагаются по дефолту при отсутствии уже выбранных из списка) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 08:24 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77, в подобном решении --- давать возможность для юзера задавать нейминг, есть ещё одна проблема. теперь, когда возникнут проблемы на поддержке, нужно ещё будет разбираться какой неймнинг юзер задал вместо того, чтобы сказать "дай такие-то и такие файлы", и ещё куча проблем из этого может вырасти. не совсем понимаю business value от подобного решения. что это даёт пользователю, как это улучшает юзабельность софта и вообще как влияет на удобство использования? просто из любопытства. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 23:46 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
hVosttиз любопытства. Из любопытсва, один юзер как-то спросил, можно ли в названии файла (принятый факс) писать дату, номер звонящего и т.п. (Я по e-mail тупо отправляю FAX.tif (FAX.pdf...) - канонично и красиво казалось бы, как в MSFax ан нет) Я ответил нет, нельзя, типа лишнее. Ну тогда я не куплю - ответил он - и не купил. И этим вопросом интересовались так или иначе многие. Вот и весь business minus от отсутствия подобного решения. Аналогично с копированием в папку. Сейчас я генерирую для копирования в папку вот это (дабы обеспечить уникальность имени): Код: vbnet 1. 2. 3. 4. 5. 6.
Дату конечно в куче содержит, но похабненько. Фишка в том что они информацию что им нужно вместо чтоб копаться в БД (парсить текст письма и т.п.) хотят из названия файла из кучи извлечь, что для слегка программирующего человека ясно дело сильно проще. Было еще предложение текстовуху с "данными" рядом ложить, но это уже перебор. В общем надо потихоньку идти навстречу клиенту, конечно все эти фичи высасывание из пальца, но в совокупности за годы, они дают хорошие плюсы и хороший внешний вид продукта. hVosttв подобном решении --- давать возможность для юзера задавать нейминг, есть ещё одна проблема. теперь, когда возникнут проблемы на поддержке Ну запрещенные символы я вычеркиваю прогоном через Function CorrectFileName() -выше привел, пустой pattern не разрешаю. Debug Log ведется если надо. Всегда есть "Default", и стандартный "Custom" (см. картинку). При одинаковых файлах (копирование в папку) будет дописываться (2) ,(3)… -см. соседний мой пост, где как раз эту задачу пытаюсь корректно решить. При Email Attach одинаковость не критична. %Переменные% стандартные берутся из меню кнопки (см. картинку), при ошибке в "%ПЯРЯменнай%" подстановки не произойдет - будет текст. Что там еще "в ногу"? Гимор, да. Рост как программиста - никакого - 15 лет назад примерно так же писал (даже не API кот. мозги хоть тренируют). Зато новая "фича", красивый GUI, "м.б. это кому-нибудь нады". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 00:39 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77а вот стрелять по ногам по форматам даты и времени направо и налево, ну не дам не дам, пусть выбирает "из разумного для данной местности". В общем начал с "GUI выбора шаблона", код и картинка типа такие намечаются: (на первое место в список комбо как раз подставляются системно выбранные "короткая дата" и "короткое время", они же и предлагаются по дефолту при отсутствии уже выбранных из списка) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81.
Красиво то оно красиво, но лоханулся я с "локализацией форматов". Код под спойлером дает интерфейс настроек. Алгоритм такой: загружаются форматы даты-времени "текущей культуры" выбирается 1) сохраненный выбранный ранее паттерн (если он соответствует одному из значений списка) либо 2) первый паттерн из списка (для "текущей культуры") - если сохраненный выбранный ранее паттерн в списке отсутствует (т.е. напр. когда юзер поменял "культуру"). Исполняющее приложение действует точно также. 1) берет сохраненный паттерн 2) заменяет его на дефолтный для "текущей культуры" если оный отсутствует в "текущей культуре". Вроде как написал все, тестирую, все зашибись, душа радуется. Выбираю "Японский (Япония)", сохраняю время как "tt hh-mm-ss", предполагающий ероглифы вместо tt. Запускаю тест, он мне делает 17.07.2019 6-09 (заменил гад на дефолтный русский). Дошло быстро. Настройка делается под Current User (язык японский) Исполняющее приложение запускается под NETWORK SERVICE (служба факсов там штатно-честно трудится и она оттуда вызывает мое exe). Язык - ну очевидно русский (что был при установке ОС). Поменять культуру в NETWORK SERVICE (или Local System) м.б. и можно, но не иначе как утилитами Русиновича и им подобными, и ясен пень что в здравом уме ни один юзер такой фигней заниматься не будет. Попытался закомментировать в исполняющем приложении "2) заменяет его на дефолтный для "текущей культуры" если оный отсутствует в "текущей культуре"." Задачу это не решает. Японский "tt hh-mm-ss" не проставит tt-иероглифы перед временем, если прога стартовала на "русской культуре". Вот даже и не знаю пока, как разрулить, видимо без бутылки не получится. Логично предположить, что культура CurrentUser совпадает с культурой NETWORK SERVICE, но это далеко не всегда так. На Win10/8.1/7 это как правило так и есть (типичная бытовая установка), а вот на Win Server сейчас обычно ставится английский, а потом локализуется установкой языкового пакета. Ну, есть идея записывать "культуру" в настройки, настраивающий "Current User" ес-но рассчитывает получить "свой культурный результат" - в общем-то логично. но принудительное изменение культуры приложения кодом на ходу (не пробовал но судя по функциям SerCulture это возможно) повлияет на все приложение, а не только на форматы даты-времени. Не уверен что я этого хочу, но идея в общем разумна (еще ошибки в debug будет "культурней" писать и т.д.). В общем творчество проявлять надо. Подумаю об этом позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 06:47 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77, А что у тебя будет происходить на терминальном сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 08:13 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77, А что у тебя будет происходить на терминальном сервере? А причем тут сервер? Много учетных записей - разно- "некультурных"? Дмитрий77...видимо без бутылки не получится. ... Ну, есть идея записывать "культуру" в настройки, настраивающий "Current User" ес-но рассчитывает получить "свой культурный результат" - в общем-то логично. но принудительное изменение культуры приложения кодом на ходу (не пробовал но судя по функциям SerCulture это возможно) повлияет на все приложение, а не только на форматы даты-времени. Не уверен что я этого хочу, но идея в общем разумна (еще ошибки в debug будет "культурней" писать и т.д.). В общем творчество проявлять надо. Подумаю об этом позже. Принял ее [бутылку (прим.)], поспал, подумал, появилась идея как надо. Думаю, что я зря перезаложился на CurrentCulture Culture надо выбирать-сохранять в настройках, а потом просто использовать эту заданную Culture при распечатке String -под любым аккаунтом (есть же все в функциях), а не менять Culture всего потока-приложения. Автоматику с CurrentCulture можно использовать разве что в качестве дефолта при первом выводе GUI настройки, когда еще ничего не сохранено. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 18:58 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
OK, вопрос. А как вот так комбобокс заполнить? Как на картинке (панель управления). И чтоб отсортировано было по алфавиту. Не уверен, что мне нужно "точное совпадение" с панелью управления (совсем точного получить не получается). Но смысл в следующем. 1) Одно из значений должно соответствовать CultureInfo.CurrentCulture, чтоб его можно было выбрать в .Text (Combobox) 2) Каждой записи должно соответствовать то, что я могу сохранить как текст из чего потом можно сделать Culture и DateTimeFormat.GetAllDateTimePatterns (полагаю "ru-Ru", "en-US", "en-GB"...) 3) Список должен быть отсортирован по .DisplayName Наиболее близко к "панели управления" Афарский (Джибути) Афарский (Эритрея) Афарский (Эфиопия) Африкаанс (Намибия) Африкаанс (ЮАР) Агем (Камерун) Акан (Гана) Амхарский (Эфиопия) Арабский (общепринятый) Арабский (ОАЭ) Арабский (Бахрейн) Арабский (Джибути) Арабский (Алжир) Арабский (Египет) Арабский (Эритрея) Арабский (Израиль) Арабский (Ирак) Арабский (Иордания) Арабский (Коморские острова) Арабский (Кувейт) Арабский (Ливан) Арабский (Ливия) Арабский (Марокко) Арабский (Мавритания) Арабский (Оман) Арабский (Палестинская Автономия) Арабская (Катар) Арабский (Саудовская Аравия) Арабский (Судан) Арабский (Сомали) Арабский (Южный Судан) Арабский (Сирия) Арабский (Чад) Арабский (Тунис) Арабский (Йемен) Арауканский (Чили) Ассамский (Индия) Aсу (Танзания) Астурийский (Испания) Азербайджанский (кириллица, Азербайджан) Азербайджанский (латиница, Азербайджан) Башкирский (Россия) Басаа (Камерун) Белорусский (Беларусь) Бемба (Замбия) Бена (Танзания) Болгарский (Болгария) Эдо (Нигерия) Бамана (Латинский, Мали) Бенгальский (Бангладеш) Бенгальский (Индия) Тибетский (КНР) Тибетский (Индия) Бретонский (Франция) Бодо (Индия) Боснийский (кириллица, Босния и Герцеговина) Боснийский (латиница, Босния и Герцеговина) Билен (Эритрея) Каталанский (Андорра) каталанский (каталанский) Валенсийский (Испания) Каталанский (Франция) Каталанский (Италия) Чеченский (Россия) Кига (Уганда) Чероки (Чероки) Корсиканский (Франция) Чешский (Чешская Республика) Церковнославянский (Россия) Валлийский (Соединенное Королевство) Датский (Дания) Датский (Гренландия) Таита (Кения) Немецкий (Австрия) Немецкий (Бельгия) Немецкий (Швейцария) Немецкий (Германия) Немецкий (Италия) Немецкий (Лихтенштейн) Немецкий (Люксембург) Зарма (Нигер) Нижнелужицкий (Германия) Дуала (Камерун) Мальдивский (Мальдивы) Йола-Фонуй (Сенегал) Дзонг-кэ (Бутан) Эмбу (Кения) Эве (Гана) Эве (Того) Греческий (Кипр) Греческий (Греция) Английский (международный) Английский (Карибские о-ва) Английский (Европа) Английский (Антигуа и Барбуда) Английский (Ангилья) Английский (Американское Самоа) Английский (Австрия) Английский (Австралия) Английский (Барбадос) Английский (Бельгия) Английский (Бурунди) Английский (Бермуды) Английский (Багамы) Английский (Ботсвана) Английский (Белиз) Английский (Канада) Английский (Кокосовые острова [Килинг]) Английский (Швейцария) Английский (Острова Кука) Английский (Камерун) Английский (Остров Рождества) Английский (Кипр) Английский (Германия) Английский (Дания) Английский (Доминика) Английский (Эритрея) Английский (Финляндия) Английский (Фиджи) Английский (Фолклендские острова) Английский (Микронезия) Английский (Соединенное Королевство) Английский (Гренада) Английский (Гернси) Английский (Гана) Английский (Гибралтар) Английский (Гамбия) Английский (Гуам) Английский (Гайана) Английский (САР Гонконг) Английский (Индонезия) Английский (Ирландия) Английский (Израиль) Английский (О-в Мэн) Английский (Индия) Английский (Британская территория в Индийском океане) Английский (Джерси) Английский (Ямайка) Английский (Кения) Английский (Кирибати) Английский (Сент-Киттс и Невис) Английский (Каймановы острова) Английский (Сент-Люсия) Английский (Либерия) Английский (Лесото) Английский (Мадагаскар) Английский (Маршалловы острова) Английский (САР Макао) Английский (северные Марианские острова) Английский (Монтсеррат) Английский (Мальта) Английский (Маврикий) Английский (Малави) Английский (Малайзия) Английский (Намибия) Английский (Остров Норфолк) Английский (Нигерия) Английский (Нидерланды) Английский (Науру) Английский (Ниуэ) Английский (Новая Зеландия) Английский (Папуа-Новая Гвинея) Английский (Республика Филиппины) Английский (Пакистан) Английский (острова Питкэрн) Английский (Пуэрто-Рико) Английский (Палау) Английский (Руанда) Английский (Соломоновы Острова) Английский (Сейшельские острова) Английский (Судан) Английский (Швеция) Английский (Сингапур) Английский (Острова Святой Елены, Вознесения и Тристан-да-Кунья) Английский (Словения) Английский (Сьерра-Леоне) Английский (Южный Судан) Английский (Синт-Мартен) Английский (Свазиленд) Английский (Острова Теркс и Кайкос) Английский (Токелау) Английский (Тонга) Английский (Тринидад и Тобаго) Английский (Тувалу) Английский (Танзания) Английский (Уганда) Английский (внешние малые острова США) Английский (США) Английский (Сент-Винсент и Гренадины) Английский (Британские Виргинские острова) Английский (Виргинские острова США) Английский (Вануату) Английский (Самоа) Английский (ЮАР) Английский (Замбия) Английский (Зимбабве) Эсперанто (международный) Испанский (Латинская Америка) Испанский (Аргентина) Испанский (Боливия) Испанский (Бразилия) Испанский (Белиз) Испанский (Чили) Испанский (Колумбия) Испанский (Коста-Рика) Испанский (Куба) Испанский (Доминиканская республика) Испанский (Эквадор) Испанский (Испания) Испанский (Экваториальная Гвинея) Испанский (Гватемала) Испанский (Гондурас) Испанский (Мексика) Испанский (Никарагуа) Испанский (Панама) Испанский (Перу) Испанский (Филиппины) Испанский (Пуэрто-Рико) Испанский (Парагвай) Испанский (Сальвадор) Испанский (США) Испанский (Уругвай) Испанский (Боливарийская Республика Венесуэла) Эстонский (Эстония) Баскский (Баскский) Евондо (Камерун) Персидский (Иран) Фула (Камерун) Фула (Гвинея) Фула (латиница, Сенегал) Фула (Мавритания) Фулах (Нигерия) Финский (Финляндия) Филиппинский (Филиппины) Фарерский (Дания) Фарерский (Фарерские о-ва) Французский (Карибские острова) Французский (Бельгия) Французский (Буркина-Фасо) Французский (Бурунди) Французский (Бенин) Французский (Сен-Бартелеми) Французский (Канада) Французский (Конго, ДРК) Французский (Центральноафриканская Республика) Французский (Конго) Французский (Швейцария) Французский (Кот-д'Ивуар) Французский (Камерун) Французский (Джибути) Французский (Алжир) Французский (Франция) Французский (Габон) Французский (Французская Гвиана) Французский (Гвинея) Французский (Гваделупа) Французский (Экваториальная Гвинея) Французский (Гаити) Французский (Коморские острова) Французский (Люксембург) Французский (Марокко) Французский (Монако) Французский (Сен-Мартен) Французский (Мадагаскар) Французский (Мали) Французский (Мартиника) Французский (Мавритания) Французский (Маврикий) Французский (Новая Каледония) Французский (Нигер) Французский (Французская Полинезия) Французский (Сен-Пьер и Микелон) Французский (Реюньон) Французский (Руанда) Французский (Сейшельские острова) Французский (Сенегал) Французский (Сирия) Французский (Чад) Французский (Того) Французский (Тунис) Французский (Вануату) Французский (Уоллис и Футуна) Французский (Майотта) Фриульский (Италия) Фризский (Нидерланды) Ирландский (Ирландия) Шотландский гэльский (Соединенное Королевство) Галицийский (Галиция) Гуарани (Парагвай) Эльзасский (Швейцария) Эльзасский (Франция) Эльзасский (Лихтенштейн) Гуджарати (Индия) Гуси (Кения) Мэнский (О-в Мэн) Хауса (Латынь, Гана) Хауса (Латынь, Нигер) Хауса (латиница, Нигерия) Гавайский (США) Иврит (Израиль) Хинди (Индия) Хорватский (латиница, Босния и Герцеговина) Хорватский (Хорватия) Верхнелужицкий (Германия) Венгерский (Венгрия) Армянский (Армения) Интерлингва (международный) Интерлингва (Франция) Ибибио (Нигерия) Индонезийский (Индонезия) Игбо (Нигерия) Ий (КНР) Исландский (Исландия) Итальянский (Швейцария) Итальянский (Италия) Итальянский (Сан-Марино) Итальянский (Ватикан) Инуктитут (слоговое письмо, Канада) Инуктитут (латиница, Канада) Японский (Япония) Нгомба (Камерун) Мачаме (Танзания) Яванский (яванское письмо, Индонезия) Яванский (Индонезия) Грузинский (Грузия) Кабильский (Алжир) Камба (Кения) Маконде (Танзания) Кабувердиану (Кабо-Верде) Койра чини (Мали) Кикую (Кения) Казахский (Казахстан) Како (Камерун) Гренландский (Гренландия) Календжин (Кения) Кхмерский (Камбоджа) Каннада (Индия) Корейский (Северная Корея) Корейский (Корея) Конкани (Индия) Канури (Нигерия) Кашмири (Персо-Арабский) Кашмири (деванагари, Индия) Шамбала (Танзания) Бафиа (Камерун) Рипуариан (Германия) Центрально-курдский (Ирак) Курдский (персидско-арабский, Иран) Корнуоллский (Соединенное королевство) Киргизский (Киргизия) Латинский (все страны) Ланги (Танзания) Люксембургский (Люксембург) Ганда (Уганда) Lakota (США) Лингала (Ангола) Лингала (Конго, ДРК) Лингала (Центральноафриканская Республика) Лингала (Конго) Лаосский (Лаосская Народно-Демократическая Республика) Северный лури (Ирак) Северный лури (Иран) Литовский (Литва) Луба-Катанга (Конго, ДРК) Луо (Кения) Лухья (Кения) Латышский (Латвия) Масаи (Кения) Масаи (Танзания) Меру (Кения) Маврикийский (Маврикий) Малагасийский (Мадагаскар) Махува-Меето (Мозамбик) Мета (Камерун) Маори (Новая Зеландия) Македонский (Бывшая Югославская Республика Македония) Малаялам (Индия) Монгольский (кириллица, Монголия) Монгольский (старомонгольское письмо, КНР) Монгольский (традиционный монгольский, Монголия) Манипурский (Индия) Мохаук (племя Мохаук) Маратхи (Индия) Малайский (Бруней, Дар-эс-Салам) Малайский (Малайзия) Малайский (латинский, Сингапур) Мальтийский (Мальта) Мунданг (Камерун) Бирманский (Мьянма) Мазандеранский (Иран) Нама (Намибия) Норвежский (букмол, Норвегия) Норвежский (букмол, Шпицберген и Ян-Майен) Северный Ндебеле Зимбабве) Нижненемецкий (Германия) Нижненемецкий (Нидерланды) Непальский (Индия) Непальский (Непал) Голландский (Аруба) Голландский (Бельгия) Голландский (Бонайре, Синт-Эстатиус и Саба) Нидерландский (Кюрасао) Голландский (Нидерланды) Голландский (Суринам) Голландский (Синт-Мартен) Квасио (Камерун) Норвежский (нюнорск, Норвегия) Нгиембун (Камерун) Нко (Гвинея) Южный Ндебеле (ЮАР) Северный сото (ЮАР) Нуэр (Южный Судан) Ньянколе (Уганда) Окситанский (Франция) Оромо (Эфиопия) Оромо (Кения) Ория (Индия) Осетинский (кириллица, (Грузия) Осетинский (кириллица, Россия) Панджаби (Пакистан) Панджаби (Индия) Папьяменто (Карибские острова) Польский (Польша) Прусский (мир) Дари (Афганистан) Пушту (Афганистан) Португальский (Ангола) Португальский (Бразилия) Португальский (Швейцария) Португальский (Кабо-Верде) Португальский (Экваториальная Гвинея) Португальский (Гвинея-Бисау) Португальский (Люксембург) Португальский (Макао, ЮАР) Португальский (Мозамбик) Португальский (Португалия) Португальский (Сан-Томе и Принсипи) Португальский (Восточный Тимор) Киче (Гватемала) Кечуа (Боливия) Кечуа (Эквадор) Кечуа (Перу) Ретороманский (Швейцария) Рунди (Бурунди) Румынский (Молдова) Румынский (Румыния) Ромбо (Танзания) Русский (Беларусь) Русский (Кыргызстан) Русский (Казахстан) Русский (Молдова) Русский (Россия) Русский (Украина) Киньяруанда (Руанда) Рва (Танзания) Санскрит (Индия) Саха (Россия) Самбуру (Кения) Сангу (Танзания) Синдхи (Пакистан) Синдхи (деванагари, Индия) Северносаамский (Финляндия) Северносаамский (Норвегия) Северносаамский (Швеция) Сена (Мозамбик) Койраборо Сенни (Мали) Санго (Центральноафриканская Республика) Тачелхит (Латинский, Марокко) Тачелхит (Тифинаг, Марокко) Сингальский (Шри-Ланка) Словацкий (Словакия) Словенский (Словения) южносаамский (Норвегия) южносаамский (Швеция) луле-саамский (Норвегия) луле-саамский (Швеция) инари-саамский (Финляндия) сколт-саамский (Финляндия) Шона (латинский, Зимбабве) Сомали (Джибути) Сомали (Эфиопия) Сомали (Кения) Сомали (Сомали) Албанский (Албания) Албанский (Бывшая Югославская Республика Македония) Албанский (Косово) Сербский (кириллица, Босния и Герцеговина) Сербский (кириллица, Черногория) Сербский (кириллица, Сербия) Сербский (кириллица, Косово) Сербский (латиница, Босния и Герцеговина) Сербский (латиница, Черногория) Сербский (латиница, Сербия) Сербский (латиница, Косово) Свати (Свазиленд) Свати (ЮАР) Саха (Эритрея) Сесото (Лесото) Южный Сото (ЮАР) Шведский (Аландские острова) Шведский (Финляндия) Шведский (Швеция) Суахили (Демократическая Республика Конго) Суахили (Кения) Суахили (Танзания) Суахили (Уганда) Сирийский (Сирия) Тамильский (Индия) Тамильский (Шри-Ланка) Тамильский (Малайзия) Тамильский (Сингапур) Телугу (Индия) Тесо (Кения) Тесо (Уганда) Таджикский (кириллица, Таджикистан) Тайский (Таиланд) Тигринья (Эритрея) Тигринья (Эфиопия) Тигре (Эритрея) Туркменский (Туркменистан) Тсвана (Ботсвана) Тсвана (ЮАР) Тонганский (Тонга) Турецкий (Кипр) Турецкий (Турция) Тсонга (ЮАР) Татарский (Россия) Тасавак (Нигер) Среднеатласский тамазигхт (арабский, Марокко) Тамазигхт (латиница, Алжир) Среднеатласский тамазигхтский (латинский, Марокко) Среднеатласский тамазигх (тифинаг, Марокко) Уйгурский (КНР) Украинский (Украина) Урду (Индия) Урду (Исламская Республика Пакистан) Узбекский (Персо-арабский, Афганистан) Узбекский (кириллица, Узбекистан) Узбекский (латиница, Узбекистан) Вай (латинский, Либерия) Вай (Вай, Либерия) Венда (ЮАР) Вьетнамский (Вьетнам) Волапюк (международный) Вуньо (Танзания) Валлисский (Швейцария) Волайта (Эфиопия) волоф (Сенегал) Коса (ЮАР) Сога (Уганда) Янгбен (Камерун) Идиш (междунараодный) Йоруба (Бенин) Йоруба (Нигерия) Стандартный марокканский тамазигхтский (Тифинаг, Марокко) Китайский (упрощенное письмо, КНР) Китайский (упрощенный хан, Гонконг, САР) Китайский (упрощенный хан, Макао, САР) Китайский (традиционное письмо, Гонконг (ОАР)) Китайский (традиционное письмо, Макао (ОАР)) Китайский (упрощенное письмо, Сингапур) Китайский (традиционное письмо, Тайвань) Зулу (ЮАР) но не совсем соответствует и очевидно не совсем сортированный ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 20:09 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77Наиболее близко к "панели управления" Имелось в виду то, что получается кодом Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 20:13 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77но не совсем соответствует и очевидно не совсем сортированныйЭто потому что источником данных является не массив строк, а набор записей. Отсортированный по полю Order, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 20:15 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Который, если надо, можно превратить обратно в массив строк, не теряя сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 20:18 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Antonariy, С сортировкой понятно, он же не на локализованный DisplayName (чего я хочу видеть) опирается при получении набора. Есть у меня этот класс ужасный .Net-овсий, кот. сортирует. Надо будет вспоминать. Не совсем ясно, почему я не могу получить набор именно как в панели управления. Пробовал .InstalledWin32Cultures, но там еще в довесок выводятся всякие инвариантные "ru" "en", в любом случае не ровно то, т.е. какой нибудь "Арабский (Объединенные Арабские...)" может быть написан как "Арабский (ОАЭ)", а чего-нибудь вообще с гамматической ошибкой "Арабск ая (Катар)". Или у .Net вообще своя Culture/Date/Time кухня не связанная с "системной", хотя и сильно похожая? Не, ну понятно что Culture для запущенного процесса/потока он же берет из системной текущей. Тогда вопрос, надо ли мне чтоб уж точно "как в панели" и какой CultureType таки разумно выбрать ? (ну не в API же месяц копаться ради этого, надо ж чтоб от .Net хоть какая-то практическая польза была коль на нем пишу). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 20:56 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Net 2.0 и Net 4.5 вообще разные наборы выводит одним и тем же кодом. Подозреваю, что проблема в разном использовании EnumSystemLocalesW //XP EnumSystemLocalesEx //следует использовать >=Vista, не работает на XP Чтоб разобраться, надо отсортировать и наверно все-таки родные API enum-ы "прощупать". И к слову, на XP/2003 набор в окошке в панели упр. несколько иной. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 21:48 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
Дмитрий77надо отсортировать В Combobox оказывается есть св-во Sorted - не знал, привык с Listview мучаться - одной проблемой меньше. Но нет свойства Item(i).Tag - это плохо. Сохранять то надо en-US, а не "Английский (США)" -лишний цикл for each по всем "культурам". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 23:01 |
|
Получить текущие системные форматы даты и далее строку даты согл. выбранному формату
|
|||
---|---|---|---|
#18+
hVosttДмитрий77вряд ли мне нужны здесь "API". Нужны, если ты привязываешься к окошку, скрин на который кидал. Да, нужны. Поковырялся и согласился. Для изначальной постановки без вывода "списка локалей" и закладыванием на "дефолтную текущую" оно как бы можно было забить, но постановка поменялась в силу неоднозначного понятия "дефолтной текущей" и список надо выводить. Казалось бы, вся эта кухня в .Net "из коробки", но реально по индуски. Наборы пляшут от OS к OS, и от одной версии .Net к другой (на одном компе/той же OS), вывод DisplayName местами с грамматическими ошибками, что-то лишнее, чего-то не хватает, на Win2003 так вообще местами квадратики вместо иероглифов (если закладываться на .Net наборы). Ни одного набора точно равного тому что в панели управления нигде не увидел. Ощущение, что когда-то было написано под .Net 1.0/Win2000, и с каждой версией .Net они это гавнокодят абы кабы, мешая старые API с новыми. Короче, поразмялся, написал гибридный код .Net+API, все на API делать не буду, муторно. Некоторые вещи индусский код делает корректно (при подсунутом API наборе локалей), а именно 1) текущая локаль CultureInfo.CurrentCulture.Name OK. 2) LCID-> локаль New CultureInfo(LCID).Name OK. 3) Получение наборов форматов Culture.DateTimeFormat.GetAllDateTimePatterns("d"c) //("t"c) ("T"c) OK. 4) Форматирование в строку [date].ToString(format, New CultureInfo(locale)) -OK А вот сам набор локалей (как в панели управления) только через API, причем по разному для разных OS XP/2003: EnumSystemLocales +EnumLocalesProc + LCID_INSTALLED Виста: EnumSystemLocalesEx + LocaleEnumprocex + LOCALE_WINDOWS Win7 и выше: EnumSystemLocalesEx + LocaleEnumprocex + LOCALE_SPECIFICDATA Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 19:30 |
|
|
start [/forum/topic.php?fid=20&fpage=18&tid=1398873]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
99ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
others: | 252ms |
total: | 481ms |
0 / 0 |