diff --git a/src/xenia/base/chrono.h b/src/xenia/base/chrono.h index 8f60e996e..1e9e0ea05 100644 --- a/src/xenia/base/chrono.h +++ b/src/xenia/base/chrono.h @@ -89,13 +89,15 @@ struct NtSystemClock { return sys_time{cdp.time_since_epoch()}; } + // TODO(Gliniak): Disable until WINE will implement tzdb. + /* template static constexpr std::enable_if_t< domain_fresh_ == Domain::Host, std::chrono::local_time> to_local(const time_point& tp) { return std::chrono::current_zone()->to_local(to_sys(tp)); - } + }*/ template static constexpr std::enable_if_t diff --git a/src/xenia/kernel/xam/ui/game_achievements_ui.cc b/src/xenia/kernel/xam/ui/game_achievements_ui.cc index 6f527be67..15bae9922 100644 --- a/src/xenia/kernel/xam/ui/game_achievements_ui.cc +++ b/src/xenia/kernel/xam/ui/game_achievements_ui.cc @@ -103,21 +103,21 @@ xe::ui::ImmediateTexture* GameAchievementsUI::GetIcon( std::string GameAchievementsUI::GetUnlockedTime( const Achievement& achievement_entry) const { if (achievement_entry.IsUnlockedOnline()) { - const auto unlock_time = chrono::WinSystemClock::to_local( - achievement_entry.unlock_time.to_time_point()); + const auto unlock_time = + std::chrono::system_clock::to_time_t(chrono::WinSystemClock::to_sys( + achievement_entry.unlock_time.to_time_point())); - return fmt::format( - "Unlocked: {:%Y-%m-%d %H:%M}", - std::chrono::system_clock::time_point(unlock_time.time_since_epoch())); + return fmt::format("Unlocked: {:%Y-%m-%d %H:%M}", + fmt::localtime(unlock_time)); } if (achievement_entry.unlock_time.is_valid()) { - const auto unlock_time = chrono::WinSystemClock::to_local( - achievement_entry.unlock_time.to_time_point()); + const auto unlock_time = + std::chrono::system_clock::to_time_t(chrono::WinSystemClock::to_sys( + achievement_entry.unlock_time.to_time_point())); - return fmt::format( - "Unlocked: Offline ({:%Y-%m-%d %H:%M})", - std::chrono::system_clock::time_point(unlock_time.time_since_epoch())); + return fmt::format("Unlocked: Offline ({:%Y-%m-%d %H:%M})", + fmt::localtime(unlock_time)); } return fmt::format("Unlocked: Offline"); } diff --git a/src/xenia/kernel/xam/ui/title_info_ui.cc b/src/xenia/kernel/xam/ui/title_info_ui.cc index 84f19ef7a..c9d7bff4b 100644 --- a/src/xenia/kernel/xam/ui/title_info_ui.cc +++ b/src/xenia/kernel/xam/ui/title_info_ui.cc @@ -86,8 +86,9 @@ void TitleListUI::DrawTitleEntry(ImGuiIO& io, TitleInfo& entry) { if (entry.WasTitlePlayed()) { ImGui::TextUnformatted( fmt::format("Last played: {:%Y-%m-%d %H:%M}", - std::chrono::system_clock::time_point( - entry.last_played.time_since_epoch())) + fmt::localtime(std::chrono::system_clock::to_time_t( + std::chrono::system_clock::time_point( + entry.last_played.time_since_epoch())))) .c_str()); } else { ImGui::TextUnformatted("Last played: Unknown"); diff --git a/src/xenia/kernel/xam/user_tracker.cc b/src/xenia/kernel/xam/user_tracker.cc index 2edf5ff2e..70cf6d1fa 100644 --- a/src/xenia/kernel/xam/user_tracker.cc +++ b/src/xenia/kernel/xam/user_tracker.cc @@ -235,8 +235,8 @@ std::optional UserTracker::GetUserTitleInfo( info.icon = game_gpd->second.GetImage(kXdbfIdTitle); if (title_data->last_played.is_valid()) { - info.last_played = chrono::WinSystemClock::to_local( - title_data->last_played.to_time_point()); + info.last_played = + chrono::WinSystemClock::to_sys(title_data->last_played.to_time_point()); } return info; @@ -270,7 +270,7 @@ std::vector UserTracker::GetPlayedTitles(uint64_t xuid) const { info.title_name = user->dashboard_gpd_.GetTitleName(title_data->title_id); if (title_data->last_played.is_valid()) { - info.last_played = chrono::WinSystemClock::to_local( + info.last_played = chrono::WinSystemClock::to_sys( title_data->last_played.to_time_point()); } diff --git a/src/xenia/kernel/xam/user_tracker.h b/src/xenia/kernel/xam/user_tracker.h index 58f022b63..35ee0b04d 100644 --- a/src/xenia/kernel/xam/user_tracker.h +++ b/src/xenia/kernel/xam/user_tracker.h @@ -34,7 +34,7 @@ struct TitleInfo { X_XDBF_AVATARAWARDS_COUNTER all_avatar_awards; X_XDBF_AVATARAWARDS_COUNTER male_avatar_awards; X_XDBF_AVATARAWARDS_COUNTER female_avatar_awards; - std::chrono::local_time last_played; + std::chrono::sys_time last_played; std::span icon;