Проблема с форматированием длинных дат и использованием GetLocaleInfoEx с LOCALE_SLONGDATE

#visual-c #mfc

#visual-c #mfc

Вопрос:

Я здесь запутался. В соответствии с моими региональными настройками Windows 10 формат длинной даты:

введите описание изображения здесь

Я корректировал некоторый код MFC:

 strDate = CFormatUtility::FormatAsLongDate(datToFormat);
  

Итак, приведенный выше вызов этого метода:

 CString CFormatUtility::FormatAsLongDate(COleDateTime datDate)
{
    CString strFormattedText;

    TRY
    {
        TCHAR szDateFormatString[_MAX_PATH];
        GetLocaleInfoEx(theApp.GetHtmlLanguageCode(),
            LOCALE_SLONGDATE, szDateFormatString, _MAX_PATH);

        strFormattedText = FormatAsCustomDate(datDate, szDateFormatString);
    }
    CATCH(CException, Except)
    {

    }
    END_CATCH

    return strFormattedText;
}
  

Я не показываю вам последующий метод, потому что проблема здесь:

     TCHAR szDateFormatString[_MAX_PATH];
    GetLocaleInfoEx(theApp.GetHtmlLanguageCode(),
        LOCALE_SLONGDATE, szDateFormatString, _MAX_PATH);
  

В соответствии с расширенными настройками Windows:

введите описание изображения здесь

Тем не менее, когда я использую приведенный выше код:

введите описание изображения здесь

Как вы можете видеть, строка формата — это dddd, MMMM d, yyyy что-то неправильное.

Согласно документации к LOCALE_SLONGDATE нему говорится:

Длинная строка форматирования даты для локали. Максимальное количество символов, разрешенных для этой строки, равно 80, включая завершающий нулевой символ. Строка может состоять из комбинации изображений в формате дня, месяца, года и эпохи и любой строки символов, заключенных в одинарные кавычки. Символы в одинарных кавычках остаются такими, как указано. Например, длинная дата в Испании (Испания) — это «dddd, dd’ de’MMMM’ de ‘гггг». Локали могут определять несколько форматов длинных дат.

Я должен уточнить, что значение первого параметра равно en .

Обновить

В моих региональных настройках я вижу, что существует несколько типов длинных дат:

введите описание изображения здесь

Но весь смысл этого упражнения в том, что я получаю строку формата, которая используется региональными настройками. И он не возвращает эту строку dd MMMM yyyy .

Ответ №1:

Проблема (в моем случае в том, что моя операционная система — английская Великобритания. Поэтому мне пришлось использовать код языка en-gb , а затем он показывает мою строку формата даты.