Code:
#include <QCoreApplication>
#include <QLocale>
#include <QDate>
#include <QtDebug>
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
QLocale locale1(QLocale::German, QLocale::Germany);
for (int m = 1; m <= 3; m++)
{
QDate date1(2025, m, 1);
qDebug() << "locale1=" << locale1 << " date1=" << date1 << "locale1.toString( date1, \"MMMM\" )=" << locale1.toString(date1, "MMMM");
}
const auto locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
for (const QLocale& locale2 : locales)
{
if (locale2.country() == QLocale::Germany && locale2.language() == QLocale::German)
{
qDebug() << "locale1 == locale2 =" << ( locale1 == locale2 );
for (int m = 1; m <= 3; m++)
{
QDate date2(2025, m, 1);
qDebug() << "locale2=" << locale2 << " date2=" << date2 << "locale2.toString( date2, \"MMMM\" )=" << locale2.toString(date2, "MMMM");
}
}
}
return 0;
}
Results:
Qt 5.15.18/MSVC2019/Windows:
Qt 5.15.18/XCode/macOS:
locale1= QLocale(German, Latin, Germany) date1= QDate("2025-01-01") locale1.toString( date1, "MMMM" )= "Januar"
locale1= QLocale(German, Latin, Germany) date1= QDate("2025-02-01") locale1.toString( date1, "MMMM" )= "Februar"
locale1= QLocale(German, Latin, Germany) date1= QDate("2025-03-01") locale1.toString( date1, "MMMM" )= "März"
locale1 == locale2 = true
locale2= QLocale(German, Latin, Germany) date2= QDate("2025-01-01") locale2.toString( date2, "MMMM" )= "January"
locale2= QLocale(German, Latin, Germany) date2= QDate("2025-02-01") locale2.toString( date2, "MMMM" )= "February"
locale2= QLocale(German, Latin, Germany) date2= QDate("2025-03-01") locale2.toString( date2, "MMMM" )= "March"
^^^Month is incorrect for locale2^^^
Qt 6.7.3/MSVC2019/Windows:
Qt 6.7.3/XCode/macOS:
locale1= QLocale(German, Latin, Germany) date1= QDate("2025-01-01") locale1.toString( date1, "MMMM" )= "Januar"
locale1= QLocale(German, Latin, Germany) date1= QDate("2025-02-01") locale1.toString( date1, "MMMM" )= "Februar"
locale1= QLocale(German, Latin, Germany) date1= QDate("2025-03-01") locale1.toString( date1, "MMMM" )= "März"
locale1 == locale2 = true
locale2= QLocale(German, Latin, Germany) date2= QDate("2025-01-01") locale2.toString( date2, "MMMM" )= "Januar"
locale2= QLocale(German, Latin, Germany) date2= QDate("2025-02-01") locale2.toString( date2, "MMMM" )= "Februar"
locale2= QLocale(German, Latin, Germany) date2= QDate("2025-03-01") locale2.toString( date2, "MMMM" )= "März"
^^^ Month is as expected^^^
So the localised month is wrong (but only inside the loop) for Qt 5.15.18.
Weirdly, day of week ("ddd" or "dddd") is correct in both cases.
I can work around it, but it is a very odd bug.