diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp index c62130e18c9..c5d0338917d 100644 --- a/Source/Core/Core/Movie.cpp +++ b/Source/Core/Core/Movie.cpp @@ -159,8 +159,15 @@ std::string MovieManager::GetRTCDisplay() const const time_t current_time = CEXIIPL::GetEmulatedTime(m_system, CEXIIPL::UNIX_EPOCH); const tm gm_time = fmt::gmtime(current_time); - // Use current locale for formatting time, as fmt is locale-agnostic by default. +#if FMT_VERSION < 120000 // fmt < 12 still supports locale overload return fmt::format(std::locale{""}, "Date/Time: {:%c}", gm_time); +#else + // fmt >= 12: no locale overload, fall back to standard library + std::ostringstream oss; + oss.imbue(std::locale("")); + oss << "Date/Time: " << std::put_time(&gm_time, "%c"); + return oss.str(); +#endif } // NOTE: GPU Thread diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp index ffd811bd6c7..0bcbac1fc9a 100644 --- a/Source/Core/Core/State.cpp +++ b/Source/Core/Core/State.cpp @@ -285,8 +285,14 @@ static std::string SystemTimeAsDoubleToString(double time) if (!local_time) return ""; - // fmt is locale agnostic by default, so explicitly use current locale. +#if FMT_VERSION < 120000 // fmt < 12 still supports locale overload return fmt::format(std::locale{""}, "{:%x %X}", *local_time); +#else + std::ostringstream oss; + oss.imbue(std::locale("")); + oss << std::put_time(&*local_time, "%x %X"); + return oss.str(); +#endif } static std::string MakeStateFilename(int number);