// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Globalization; using Humanizer; namespace osu.Game.Utils { public static class HumanizerUtils { /// /// Turns the current or provided date into a human readable sentence /// /// The date to be humanized /// distance of time in words public static string Humanize(DateTimeOffset input) { // this works around https://github.com/xamarin/xamarin-android/issues/2012 and https://github.com/Humanizr/Humanizer/issues/690#issuecomment-368536282 try { return input.Humanize(); } catch (ArgumentException) { return input.Humanize(culture: new CultureInfo("en-US")); } } /// /// Turns the current or provided big number into a readable string. /// /// The number to be humanized. /// Simplified number with a suffix. public static string ToReadableString(long input) { const int k = 1000; if (input < k) return input.ToString(); int i = (int)Math.Floor(Math.Round(Math.Log(input, k))); return $"{input / Math.Pow(k, i):F} {suffixes[i]}"; } private static readonly string[] suffixes = { "", "k", "million", "billion", "trillion", "quadrillion", "quintillion", }; } }