TimeZoneConverter.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using Abp.Configuration;
  3. using Abp.Dependency;
  4. namespace Abp.Timing.Timezone
  5. {
  6. /// <summary>
  7. /// Time zone converter class
  8. /// </summary>
  9. public class TimeZoneConverter : ITimeZoneConverter, ITransientDependency
  10. {
  11. private readonly ISettingManager _settingManager;
  12. /// <summary>
  13. /// Constructor
  14. /// </summary>
  15. /// <param name="settingManager"></param>
  16. public TimeZoneConverter(ISettingManager settingManager)
  17. {
  18. _settingManager = settingManager;
  19. }
  20. /// <inheritdoc/>
  21. public DateTime? Convert(DateTime? date, int? tenantId, long userId)
  22. {
  23. if (!date.HasValue)
  24. {
  25. return null;
  26. }
  27. if (!Clock.SupportsMultipleTimezone)
  28. {
  29. return date;
  30. }
  31. var usersTimezone = _settingManager.GetSettingValueForUser(TimingSettingNames.TimeZone, tenantId, userId);
  32. if(string.IsNullOrEmpty(usersTimezone))
  33. {
  34. return date;
  35. }
  36. return TimezoneHelper.ConvertFromUtc(date.Value.ToUniversalTime(), usersTimezone);
  37. }
  38. /// <inheritdoc/>
  39. public DateTime? Convert(DateTime? date, int tenantId)
  40. {
  41. if (!date.HasValue)
  42. {
  43. return null;
  44. }
  45. if (!Clock.SupportsMultipleTimezone)
  46. {
  47. return date;
  48. }
  49. var tenantsTimezone = _settingManager.GetSettingValueForTenant(TimingSettingNames.TimeZone, tenantId);
  50. if (string.IsNullOrEmpty(tenantsTimezone))
  51. {
  52. return date;
  53. }
  54. return TimezoneHelper.ConvertFromUtc(date.Value.ToUniversalTime(), tenantsTimezone);
  55. }
  56. /// <inheritdoc/>
  57. public DateTime? Convert(DateTime? date)
  58. {
  59. if (!date.HasValue)
  60. {
  61. return null;
  62. }
  63. if (!Clock.SupportsMultipleTimezone)
  64. {
  65. return date;
  66. }
  67. var applicationsTimezone = _settingManager.GetSettingValueForApplication(TimingSettingNames.TimeZone);
  68. if (string.IsNullOrEmpty(applicationsTimezone))
  69. {
  70. return date;
  71. }
  72. return TimezoneHelper.ConvertFromUtc(date.Value.ToUniversalTime(), applicationsTimezone);
  73. }
  74. }
  75. }