using System; namespace PKHeX.Core { public static partial class Util { /// /// Determines whether or not the given date components are valid. /// /// The year of the date of which to check the validity. /// The month of the date of which to check the validity. /// The day of the date of which to check the validity. /// A boolean indicating whether or not the date is valid. public static bool IsDateValid(int year, int month, int day) { return !(year <= 0 || year > DateTime.MaxValue.Year || month < 1 || month > 12 || day < 1 || day > DateTime.DaysInMonth(year, month)); } /// /// Determines whether or not the given date components are valid. /// /// The year of the date of which to check the validity. /// The month of the date of which to check the validity. /// The day of the date of which to check the validity. /// A boolean indicating whether or not the date is valid. public static bool IsDateValid(uint year, uint month, uint day) { return year < int.MaxValue && month < int.MaxValue && day < int.MaxValue && IsDateValid((int)year, (int)month, (int)day); } private static readonly DateTime Epoch2000 = new DateTime(2000, 1, 1); private const int SecondsPerDay = 60*60*24; // 86400 public static int GetSecondsFrom2000(DateTime date, DateTime time) { int seconds = (int)(date - Epoch2000).TotalSeconds; seconds -= seconds % SecondsPerDay; seconds += (int)(time - Epoch2000).TotalSeconds; return seconds; } public static void GetDateTime2000(uint seconds, out DateTime date, out DateTime time) { date = Epoch2000.AddSeconds(seconds); time = Epoch2000.AddSeconds(seconds % SecondsPerDay); } public static string ConvertDateValueToString(int value, int secondsBias = -1) { string tip = string.Empty; if (value >= SecondsPerDay) tip += (value / SecondsPerDay) + "d "; tip += new DateTime(0).AddSeconds(value).ToString("HH:mm:ss"); if (secondsBias >= 0) tip += Environment.NewLine + $"Date: {Epoch2000.AddSeconds(value + secondsBias)}"; return tip; } } }