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);
}
}
}