/// <summary> /// Parses a string containing a date and time into a DateTime configured for the local time zone. /// Throws a <see cref="FormatException"/> if the text can not be successfully parsed. /// </summary> /// <param name="text">Text to be parsed.</param> /// <param name="configuration">Configuration options to use. If null <see cref="OcDateTimeConfiguration.GlobalDefaults"/> will be used. </param> /// <returns>A DateTime that contains both date and time information.</returns> public static DateTime ToDateTimeAsLocal(this string text, IOcDateTimeConfiguration configuration = null) { configuration = configuration ?? OcDateTimeConfiguration.GlobalDefaults; foreach (var culture in configuration.InputCultures) { if (DateTime.TryParseExact(text, configuration.InputDateTimeFormats, culture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.NoCurrentDateDefault, out var value)) { return(value.ToLocalTime()); } } throw new FormatException($"Input text of [{text}] was not recognized as a valid date and local time."); }
/// <summary> /// Parses a string containing a time into a DateTime configured for the UTC time zone. /// Throws a <see cref="FormatException"/> if the text can not be successfully parsed. /// </summary> /// <param name="text">Text to be parsed.</param> /// <param name="configuration">Configuration options to use. If null <see cref="OcDateTimeConfiguration.GlobalDefaults"/> will be used. </param> /// <returns>A DateTime that only contains time information.</returns> public static DateTime ToTimeAsUtc(this string text, IOcDateTimeConfiguration configuration = null) { configuration = configuration ?? OcDateTimeConfiguration.GlobalDefaults; foreach (var culture in configuration.InputCultures) { if (DateTime.TryParseExact(text, configuration.InputTimeFormats, culture, DateTimeStyles.AllowWhiteSpaces & DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out var value)) { return(default(DateTime).Add(value.TimeOfDay)); } } throw new FormatException($"Input text of [{text}] was not recognized as a valid universal (UTC) time."); }
/// <summary> /// Should be called ONCE during program startup and initialization to specify /// the date & time configuration options that should be used by default for the application. /// </summary> /// <param name="configuration"></param> public static void SetGlobalDefaults(IOcDateTimeConfiguration configuration) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } if (configuration != GlobalDefaults) { Debug.WriteLine($"GLOBAL-CONFIG: Changing {nameof(OcDateTimeConfiguration)}.{nameof(GlobalDefaults)} to {configuration}"); GlobalDefaults = configuration; } }
/// <summary> /// Parses a string containing a time into a DateTime configured for the local time zone. /// Throws a <see cref="FormatException"/> if the text can not be successfully parsed. /// </summary> /// <param name="text">Text to be parsed.</param> /// <param name="result">If successful contains the parsed date and time.</param> /// <param name="configuration">Configuration options to use. If null <see cref="OcDateTimeConfiguration.GlobalDefaults"/> will be used. </param> /// <returns>A DateTime that only contains time information.</returns> public static bool TryToTimeAsLocal(this string text, out DateTime result, IOcDateTimeConfiguration configuration = null) { configuration = configuration ?? OcDateTimeConfiguration.GlobalDefaults; foreach (var culture in configuration.InputCultures) { if (DateTime.TryParseExact(text, configuration.InputTimeFormats, culture, DateTimeStyles.AllowWhiteSpaces & DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.AssumeLocal, out var value)) { result = default(DateTime).Add(value.ToLocalTime().TimeOfDay); return(true); } } result = default; return(false); }
/// <summary> /// Parses a string containing a date and time into a DateTime configured for the UTC time zone. /// Throws a <see cref="FormatException"/> if the text can not be successfully parsed. /// </summary> /// <param name="text">Text to be parsed.</param> /// <param name="result">If successful contains the parsed date and time.</param> /// <param name="configuration">Configuration options to use. If null <see cref="OcDateTimeConfiguration.GlobalDefaults"/> will be used. </param> /// <returns>A DateTime that contains both date and time information.</returns> public static bool TryToDateTimeAsUtc(this string text, out DateTime result, IOcDateTimeConfiguration configuration = null) { configuration = configuration ?? OcDateTimeConfiguration.GlobalDefaults; foreach (var culture in configuration.InputCultures) { if (DateTime.TryParseExact(text, configuration.InputDateTimeFormats, culture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.NoCurrentDateDefault | DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out var value)) { result = value; return(true); } } result = default; return(false); }
/// <summary> /// Converts a DateTime into a text date and time format intended for writing to storage or sending to other systems. /// </summary> /// <param name="value">DateTime value to be converted into text.</param> /// <param name="configuration">Configuration options to use. If null <see cref="OcDateTimeConfiguration.GlobalDefaults"/> will be used. </param> /// <returns>A string containing the formatted date and time.</returns> public static string ToStorageDateTime(this DateTime value, IOcDateTimeConfiguration configuration = null) { configuration = configuration ?? OcDateTimeConfiguration.GlobalDefaults; return(value.ToUniversalTime().ToString(configuration.StorageDateTimeFormat, configuration.StorageCulture)); }
/// <summary> /// Converts a DateTime into text for displaying a date and time to the user. /// </summary> /// <param name="value">DateTime value to be converted into text.</param> /// <param name="configuration">Configuration options to use. If null <see cref="OcDateTimeConfiguration.GlobalDefaults"/> will be used. </param> /// <returns>A string containing the formatted date and time.</returns> public static string ToDisplayDateTime(this DateTime value, IOcDateTimeConfiguration configuration = null) { configuration = configuration ?? OcDateTimeConfiguration.GlobalDefaults; return(value.ToLocalTime().ToString(configuration.DisplayDateTimeFormat, configuration.DisplayCulture)); }