diff --git a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor index 34780aa0..ec6532b2 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor @@ -56,7 +56,7 @@
- +
@@ -69,7 +69,7 @@
- +
@@ -82,7 +82,7 @@
- +
@@ -97,22 +97,22 @@ @code { - private ElementReference form; - private bool validated = false; - private int _jobId; - private string _name = string.Empty; - private string _jobType = string.Empty; - private string _isEnabled = "True"; - private string _interval = string.Empty; - private string _frequency = string.Empty; - private DateTime? _startDate = null; - private string _startTime = string.Empty; - private DateTime? _endDate = null; - private string _endTime = string.Empty; - private string _retentionHistory = string.Empty; - private DateTime? _nextDate = null; - private string _nextTime = string.Empty; - private string createdby; + private ElementReference form; + private bool validated = false; + private int _jobId; + private string _name = string.Empty; + private string _jobType = string.Empty; + private string _isEnabled = "True"; + private string _interval = string.Empty; + private string _frequency = string.Empty; + private DateTime? _startDate = null; + private DateTime? _startTime = null; + private DateTime? _endDate = null; + private DateTime? _endTime = null; + private string _retentionHistory = string.Empty; + private DateTime? _nextDate = null; + private DateTime? _nextTime = null; + private string createdby; private DateTime createdon; private string modifiedby; private DateTime modifiedon; @@ -133,9 +133,9 @@ _interval = job.Interval.ToString(); _frequency = job.Frequency; (_startDate, _startTime) = Utilities.UtcAsLocalDateAndTime(job.StartDate); - (_endDate, _endTime) = Utilities.UtcAsLocalDateAndTime(job.EndDate); + (_endDate, _endTime) = Utilities.UtcAsLocalDateAndTime(job.EndDate); _retentionHistory = job.RetentionHistory.ToString(); - (_nextDate, _nextTime) = Utilities.UtcAsLocalDateAndTime(job.NextExecution); + (_nextDate, _nextTime) = Utilities.UtcAsLocalDateAndTime(job.NextExecution); createdby = job.CreatedBy; createdon = job.CreatedOn; modifiedby = job.ModifiedBy; diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs index cdf0e05e..26eec073 100644 --- a/Oqtane.Shared/Shared/Utilities.cs +++ b/Oqtane.Shared/Shared/Utilities.cs @@ -490,35 +490,39 @@ namespace Oqtane.Shared return $"[{@class.GetType()}] {message}"; } - public static DateTime? LocalDateAndTimeAsUtc(DateTime? date, string time, TimeZoneInfo localTimeZone = null) + public static DateTime? LocalDateAndTimeAsUtc(DateTime? date, DateTime? time, TimeZoneInfo localTimeZone = null) { localTimeZone ??= TimeZoneInfo.Local; + if (date != null) { - if (!string.IsNullOrEmpty(time)) + if (time != null) { - return TimeZoneInfo.ConvertTime(DateTime.Parse(date.Value.Date.ToShortDateString() + " " + time), localTimeZone, TimeZoneInfo.Utc); + DateTime localDateTime = date.Value.Date.Add(time.Value.TimeOfDay); + return TimeZoneInfo.ConvertTimeToUtc(localDateTime, localTimeZone); } - return TimeZoneInfo.ConvertTime(date.Value.Date, localTimeZone, TimeZoneInfo.Utc); + + return TimeZoneInfo.ConvertTimeToUtc(date.Value.Date, localTimeZone); } + return null; } - public static (DateTime? date, string time) UtcAsLocalDateAndTime(DateTime? dateTime, TimeZoneInfo timeZone = null) + public static (DateTime? date, DateTime? time) UtcAsLocalDateAndTime(DateTime? dateTime, TimeZoneInfo timeZone = null) { timeZone ??= TimeZoneInfo.Local; DateTime? localDateTime = null; - string localTime = string.Empty; + DateTime? localTime = null; if (dateTime.HasValue && dateTime?.Kind != DateTimeKind.Local) { if (dateTime?.Kind == DateTimeKind.Unspecified) { // Treat Unspecified as Utc not Local. This is due to EF Core, on some databases, after retrieval will have DateTimeKind as Unspecified. - // All values in database should be UTC. + // All values in the database should be UTC. // Normal .net conversion treats Unspecified as local. // https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.converttime?view=net-6.0 - localDateTime = TimeZoneInfo.ConvertTime(new DateTime(dateTime.Value.Ticks, DateTimeKind.Utc), timeZone); + localDateTime = TimeZoneInfo.ConvertTime(new DateTimeOffset(dateTime.Value.Ticks, TimeSpan.Zero), timeZone).DateTime; } else { @@ -526,14 +530,17 @@ namespace Oqtane.Shared } } - if (localDateTime != null && localDateTime.Value.TimeOfDay.TotalSeconds != 0) + if (localDateTime != null) { - localTime = localDateTime.Value.ToString("HH:mm"); + localTime = localDateTime.Value.TimeOfDay.TotalSeconds != 0 ? localDateTime.Value.Date.Add(localDateTime.Value.TimeOfDay) : (DateTime?)null; } return (localDateTime?.Date, localTime); } + + + [Obsolete("ContentUrl(Alias alias, int fileId) is deprecated. Use FileUrl(Alias alias, int fileId) instead.", false)] public static string ContentUrl(Alias alias, int fileId) {