diff --git a/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationDateTimeFormatProvider.cs b/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationDateTimeFormatProvider.cs index 83f90ae2b..d8c4b6f2e 100644 --- a/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationDateTimeFormatProvider.cs +++ b/src/Orchard.Web/Modules/Orchard.Localization/Services/LocalizationDateTimeFormatProvider.cs @@ -64,7 +64,7 @@ namespace Orchard.Localization.Services { public string ShortDateTimeFormat { get { - return String.Format("{0} {1}", ShortDateFormat, ShortTimeFormat); + return T("M/d/yyyy h:mm tt").Text; } } @@ -82,7 +82,25 @@ namespace Orchard.Localization.Services { public string LongDateTimeFormat { get { - return String.Format("{0} {1}", LongDateFormat, LongTimeFormat); + return T("dddd, MMMM d, yyyy h:mm:ss tt").Text; + } + } + + public IEnumerable AllDateFormats { + get { + return new[] { ShortDateFormat, LongDateFormat }; + } + } + + public IEnumerable AllTimeFormats { + get { + return new[] { ShortTimeFormat, LongTimeFormat }; + } + } + + public IEnumerable AllDateTimeFormats { + get { + return new[] { ShortDateTimeFormat, LongDateTimeFormat }; } } @@ -112,6 +130,12 @@ namespace Orchard.Localization.Services { } } + public string DateSeparator { + get { + return "/"; // Since we can't do it with TimeSeparator why do it with this one... + } + } + public string TimeSeparator { get { return ":"; // No good way to put a colon through a colon-separated translation process... diff --git a/src/Orchard/Localization/Services/CultureDateTimeFormatProvider.cs b/src/Orchard/Localization/Services/CultureDateTimeFormatProvider.cs index 350f67faf..26f0fdf2b 100644 --- a/src/Orchard/Localization/Services/CultureDateTimeFormatProvider.cs +++ b/src/Orchard/Localization/Services/CultureDateTimeFormatProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; namespace Orchard.Localization.Services { @@ -62,7 +63,10 @@ namespace Orchard.Localization.Services { public string ShortDateTimeFormat { get { - return String.Format("{0} {1}", ShortDateFormat, ShortTimeFormat); + // From empirical testing I am fairly certain this invariably evaluates to + // the pattern actually used when printing using the 'g' (i.e. general date/time + // pattern with short time) standard format string. /DS + return CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('g').First(); } } @@ -80,7 +84,44 @@ namespace Orchard.Localization.Services { public string LongDateTimeFormat { get { - return String.Format("{0} {1}", LongDateFormat, LongTimeFormat); + return CurrentCulture.DateTimeFormat.FullDateTimePattern; + } + } + + public IEnumerable AllDateFormats { + get { + var patterns = new List(); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('d')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('D')); + // The standard format strings 'M' (month/day pattern) and 'Y' (year/month + // pattern) are excluded because they can not be round-tripped with full + // date fidelity. + return patterns.Distinct(); + } + } + + public IEnumerable AllTimeFormats { + get { + var patterns = new List(); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('t')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('T')); + return patterns.Distinct(); + } + } + + public IEnumerable AllDateTimeFormats { + get { + var patterns = new List(); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('f')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('F')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('g')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('G')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('o')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('r')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('s')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('u')); + patterns.AddRange(CurrentCulture.DateTimeFormat.GetAllDateTimePatterns('U')); + return patterns.Distinct(); } } @@ -98,6 +139,12 @@ namespace Orchard.Localization.Services { } } + public string DateSeparator { + get { + return CurrentCulture.DateTimeFormat.DateSeparator; + } + } + public string TimeSeparator { get { return CurrentCulture.DateTimeFormat.TimeSeparator; diff --git a/src/Orchard/Localization/Services/DefaultDateLocalizationServices.cs b/src/Orchard/Localization/Services/DefaultDateLocalizationServices.cs index 5e0a6dff1..59301cffc 100644 --- a/src/Orchard/Localization/Services/DefaultDateLocalizationServices.cs +++ b/src/Orchard/Localization/Services/DefaultDateLocalizationServices.cs @@ -64,8 +64,7 @@ namespace Orchard.Localization.Services { if (!parts.HasValue) { return null; } - var calendar = CurrentCalendar; - return new DateTime(parts.Value.Date.Year, parts.Value.Date.Month, parts.Value.Date.Day, parts.Value.Time.Hour, parts.Value.Time.Minute, parts.Value.Time.Second, parts.Value.Time.Millisecond, calendar); + return new DateTime(parts.Value.Date.Year, parts.Value.Date.Month, parts.Value.Date.Day, parts.Value.Time.Hour, parts.Value.Time.Minute, parts.Value.Time.Second, parts.Value.Time.Millisecond, CurrentCalendar); } diff --git a/src/Orchard/Localization/Services/IDateTimeFormatProvider.cs b/src/Orchard/Localization/Services/IDateTimeFormatProvider.cs index 2d0aa0d3e..25e5edafe 100644 --- a/src/Orchard/Localization/Services/IDateTimeFormatProvider.cs +++ b/src/Orchard/Localization/Services/IDateTimeFormatProvider.cs @@ -72,7 +72,6 @@ namespace Orchard.Localization.Services { get; } - /// /// Gets a custom DateTime format string used to format dates for long time display. /// @@ -87,6 +86,27 @@ namespace Orchard.Localization.Services { get; } + /// + /// Gets the full list of custom DateTime format strings supported to format dates for date display. + /// + IEnumerable AllDateFormats { + get; + } + + /// + /// Gets the full list of custom DateTime format strings supported to format dates for time display. + /// + IEnumerable AllTimeFormats { + get; + } + + /// + /// Gets the full list of custom DateTime format strings supported to format dates for date and time display. + /// + IEnumerable AllDateTimeFormats { + get; + } + /// /// Gets an integer representing the first day of the week, where 0 is Sunday, 1 is Monday etc. /// @@ -102,7 +122,14 @@ namespace Orchard.Localization.Services { } /// - /// Gets the string that separates the components of time, that is, the hour, minutes, and seconds. + /// Gets the string that separates the components of date, that is, the year, month and day. + /// + string DateSeparator { + get; + } + + /// + /// Gets the string that separates the components of time, that is, the hour, minute, and second. /// string TimeSeparator { get;