improve TimeZoneService
This commit is contained in:
@ -117,13 +117,4 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="Universal" xml:space="preserve">
|
|
||||||
<value>(UTC) Coordinated Universal Time</value>
|
|
||||||
</data>
|
|
||||||
<data name="US/Eastern" xml:space="preserve">
|
|
||||||
<value>(UTC-05:00) Eastern Time (US & Canada)</value>
|
|
||||||
</data>
|
|
||||||
<data name="US/Pacific" xml:space="preserve">
|
|
||||||
<value>(UTC-08:00) Pacific Time (US & Canada)</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
</root>
|
@ -1,9 +1,11 @@
|
|||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
|
using NodaTime.TimeZones;
|
||||||
|
using NodaTime;
|
||||||
using Oqtane.Documentation;
|
using Oqtane.Documentation;
|
||||||
using Oqtane.Models;
|
using NodaTime.Extensions;
|
||||||
using Oqtane.Shared;
|
|
||||||
|
|
||||||
namespace Oqtane.Services
|
namespace Oqtane.Services
|
||||||
{
|
{
|
||||||
@ -17,18 +19,36 @@ namespace Oqtane.Services
|
|||||||
_TimeZoneLocalizer = TimeZoneLocalizer;
|
_TimeZoneLocalizer = TimeZoneLocalizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TimeZone> GetTimeZones()
|
public List<Models.TimeZone> GetTimeZones()
|
||||||
{
|
{
|
||||||
var _timezones = new List<TimeZone>();
|
var timezones = new List<Models.TimeZone>();
|
||||||
foreach (var timezone in Utilities.GetTimeZones())
|
|
||||||
|
foreach (var tz in DateTimeZoneProviders.Tzdb.GetAllZones()
|
||||||
|
// only include timezones which have a country code defined or are US timezones
|
||||||
|
.Where(item => !string.IsNullOrEmpty(TzdbDateTimeZoneSource.Default.ZoneLocations.FirstOrDefault(l => l.ZoneId == item.Id)?.CountryCode) || item.Id.ToLower().Contains("us/"))
|
||||||
|
// order by UTC offset (ie. -11:00 to +14:00)
|
||||||
|
.OrderBy(item => item.GetUtcOffset(Instant.FromDateTimeUtc(DateTime.UtcNow)).Ticks))
|
||||||
{
|
{
|
||||||
_timezones.Add(new TimeZone
|
// get localized display name
|
||||||
|
var displayname = _TimeZoneLocalizer[tz.Id].Value;
|
||||||
|
if (displayname == tz.Id)
|
||||||
{
|
{
|
||||||
Id = timezone.Id,
|
// use default "friendly" display format
|
||||||
DisplayName = _TimeZoneLocalizer[timezone.Id]
|
displayname = displayname.Replace("_", " ").Replace("/", " / ");
|
||||||
|
}
|
||||||
|
|
||||||
|
// include offset prefix
|
||||||
|
var offset = tz.GetUtcOffset(Instant.FromDateTimeUtc(DateTime.UtcNow)).Ticks;
|
||||||
|
displayname = "(UTC" + (offset >= 0 ? "+" : "-") + new DateTime(Math.Abs(offset)).ToString("HH:mm") + ") " + displayname;
|
||||||
|
|
||||||
|
timezones.Add(new Models.TimeZone()
|
||||||
|
{
|
||||||
|
Id = tz.Id,
|
||||||
|
DisplayName = displayname
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return _timezones.OrderBy(item => item.DisplayName).ToList();
|
|
||||||
|
return timezones;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user