using System; using Abp.Configuration; using Abp.Dependency; namespace Abp.Timing.Timezone { /// /// Time zone converter class /// public class TimeZoneConverter : ITimeZoneConverter, ITransientDependency { private readonly ISettingManager _settingManager; /// /// Constructor /// /// public TimeZoneConverter(ISettingManager settingManager) { _settingManager = settingManager; } /// public DateTime? Convert(DateTime? date, int? tenantId, long userId) { if (!date.HasValue) { return null; } if (!Clock.SupportsMultipleTimezone) { return date; } var usersTimezone = _settingManager.GetSettingValueForUser(TimingSettingNames.TimeZone, tenantId, userId); if(string.IsNullOrEmpty(usersTimezone)) { return date; } return TimezoneHelper.ConvertFromUtc(date.Value.ToUniversalTime(), usersTimezone); } /// public DateTime? Convert(DateTime? date, int tenantId) { if (!date.HasValue) { return null; } if (!Clock.SupportsMultipleTimezone) { return date; } var tenantsTimezone = _settingManager.GetSettingValueForTenant(TimingSettingNames.TimeZone, tenantId); if (string.IsNullOrEmpty(tenantsTimezone)) { return date; } return TimezoneHelper.ConvertFromUtc(date.Value.ToUniversalTime(), tenantsTimezone); } /// public DateTime? Convert(DateTime? date) { if (!date.HasValue) { return null; } if (!Clock.SupportsMultipleTimezone) { return date; } var applicationsTimezone = _settingManager.GetSettingValueForApplication(TimingSettingNames.TimeZone); if (string.IsNullOrEmpty(applicationsTimezone)) { return date; } return TimezoneHelper.ConvertFromUtc(date.Value.ToUniversalTime(), applicationsTimezone); } } }