diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs
index 2f966ac0a9..99372c92d9 100644
--- a/osu.Game/Configuration/OsuConfigManager.cs
+++ b/osu.Game/Configuration/OsuConfigManager.cs
@@ -102,6 +102,8 @@ namespace osu.Game.Configuration
SetDefault(OsuSetting.MenuParallax, true);
+ SetDefault(OsuSetting.Prefer24HourTime, false);
+
// Gameplay
SetDefault(OsuSetting.PositionalHitsounds, true); // replaced by level setting below, can be removed 20220703.
SetDefault(OsuSetting.PositionalHitsoundsLevel, 0.2f, 0, 1);
@@ -287,6 +289,7 @@ namespace osu.Game.Configuration
MenuVoice,
CursorRotation,
MenuParallax,
+ Prefer24HourTime,
BeatmapDetailTab,
BeatmapDetailModsFilter,
Username,
diff --git a/osu.Game/Localisation/UserInterfaceStrings.cs b/osu.Game/Localisation/UserInterfaceStrings.cs
index 4be403edb4..ac79f9f45d 100644
--- a/osu.Game/Localisation/UserInterfaceStrings.cs
+++ b/osu.Game/Localisation/UserInterfaceStrings.cs
@@ -24,6 +24,11 @@ namespace osu.Game.Localisation
///
public static LocalisableString CursorRotation => new TranslatableString(getKey(@"cursor_rotation"), @"Rotate cursor when dragging");
+ ///
+ /// "Prefer 24-hour time"
+ ///
+ public static LocalisableString Prefer24HourTime => new TranslatableString(getKey(@"prefer_24_hour_time"), @"Prefer 24-hour time");
+
///
/// "Menu cursor size"
///
diff --git a/osu.Game/Overlays/Settings/Sections/UserInterface/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/UserInterface/GeneralSettings.cs
index 59894cbcae..d6d38c8e12 100644
--- a/osu.Game/Overlays/Settings/Sections/UserInterface/GeneralSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/UserInterface/GeneralSettings.cs
@@ -41,6 +41,11 @@ namespace osu.Game.Overlays.Settings.Sections.UserInterface
Current = config.GetBindable(OsuSetting.UIHoldActivationDelay),
KeyboardStep = 50
},
+ new SettingsCheckbox
+ {
+ LabelText = UserInterfaceStrings.Prefer24HourTime,
+ Current = config.GetBindable(OsuSetting.Prefer24HourTime)
+ },
};
}
}
diff --git a/osu.Game/Overlays/Toolbar/DigitalClockDisplay.cs b/osu.Game/Overlays/Toolbar/DigitalClockDisplay.cs
index b535c5c6a2..66f40532d0 100644
--- a/osu.Game/Overlays/Toolbar/DigitalClockDisplay.cs
+++ b/osu.Game/Overlays/Toolbar/DigitalClockDisplay.cs
@@ -29,7 +29,21 @@ namespace osu.Game.Overlays.Toolbar
}
}
- private bool format12H = true;
+ private bool format12H = false;
+
+ public bool Format12H
+ {
+ get => format12H;
+ set
+ {
+ if (format12H == value)
+ return;
+
+ format12H = value;
+ updateMetrics();
+ UpdateDisplay(DateTimeOffset.Now); //Update realTime.Text immediately instead of waiting until next second
+ }
+ }
[BackgroundDependencyLoader]
private void load(OsuColour colours)
@@ -52,14 +66,14 @@ namespace osu.Game.Overlays.Toolbar
protected override void UpdateDisplay(DateTimeOffset now)
{
- realTime.Text = format12H ? $"{now:hh:mm:ss tt}" : $"{now:HH:mm:ss}";
+ realTime.Text = format12H ? $"{now:h:mm:ss tt}" : $"{now:HH:mm:ss}";
gameTime.Text = $"running {new TimeSpan(TimeSpan.TicksPerSecond * (int)(Clock.CurrentTime / 1000)):c}";
}
private void updateMetrics()
{
if (format12H)
- Width = 74;
+ Width = 70;
else
Width = showRuntime ? 66 : 45; // Allows for space for game time up to 99 days (in the padding area since this is quite rare).
diff --git a/osu.Game/Overlays/Toolbar/ToolbarClock.cs b/osu.Game/Overlays/Toolbar/ToolbarClock.cs
index 22a96603dc..b256d6fbc4 100644
--- a/osu.Game/Overlays/Toolbar/ToolbarClock.cs
+++ b/osu.Game/Overlays/Toolbar/ToolbarClock.cs
@@ -1,6 +1,7 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using System.Globalization;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Extensions.Color4Extensions;
@@ -20,6 +21,7 @@ namespace osu.Game.Overlays.Toolbar
public class ToolbarClock : OsuClickableContainer
{
private Bindable clockDisplayMode;
+ private Bindable digitalPrefer24Hour;
private Box hoverBackground;
private Box flashBackground;
@@ -38,6 +40,7 @@ namespace osu.Game.Overlays.Toolbar
private void load(OsuConfigManager config)
{
clockDisplayMode = config.GetBindable(OsuSetting.ToolbarClockDisplayMode);
+ digitalPrefer24Hour = config.GetBindable(OsuSetting.Prefer24HourTime);
Children = new Drawable[]
{
@@ -94,6 +97,9 @@ namespace osu.Game.Overlays.Toolbar
analog.FadeTo(showAnalog ? 1 : 0);
}, true);
+
+ digitalPrefer24Hour.BindValueChanged(prefer24H =>
+ digital.Format12H = prefer24H.NewValue ? false : CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains("tt"), true);
}
protected override bool OnClick(ClickEvent e)