< Summary

Information
Class: OzonOrdersWeb.Areas.Studio2.ViewModels.TransactionTimeTracking.MoscowTimeHelper
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/ViewModels/TransactionTimeTracking/MoscowTimeHelper.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 16
Coverable lines: 16
Total lines: 47
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%210%
get_Zone()100%210%
UtcToMsk(...)0%620%
Resolve()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Studio2/ViewModels/TransactionTimeTracking/MoscowTimeHelper.cs

#LineLine coverage
 1using System.Threading;
 2
 3namespace OzonOrdersWeb.Areas.Studio2.ViewModels.TransactionTimeTracking;
 4
 5/// <summary>
 6/// Московское время (UTC+3) для отчётов и графиков: единая точка настройки часового пояса.
 7/// </summary>
 8public static class MoscowTimeHelper
 9{
 010    private static readonly Lazy<TimeZoneInfo> ZoneLazy = new(Resolve, LazyThreadSafetyMode.ExecutionAndPublication);
 11
 012    public static TimeZoneInfo Zone => ZoneLazy.Value;
 13
 14    /// <summary>
 15    /// Интерпретирует входное время как UTC и переводит в зону Москвы.
 16    /// </summary>
 17    public static DateTime UtcToMsk(DateTime utcDateTime)
 18    {
 019        var normalizedUtc = utcDateTime.Kind == DateTimeKind.Utc
 020            ? utcDateTime
 021            : DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc);
 022        return TimeZoneInfo.ConvertTimeFromUtc(normalizedUtc, Zone);
 23    }
 24
 25    private static TimeZoneInfo Resolve()
 26    {
 27        try
 28        {
 029            return TimeZoneInfo.FindSystemTimeZoneById("Europe/Moscow");
 30        }
 031        catch
 32        {
 33            try
 34            {
 035                return TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
 36            }
 037            catch
 38            {
 039                return TimeZoneInfo.CreateCustomTimeZone(
 040                    "UTC+3",
 041                    TimeSpan.FromHours(3),
 042                    "UTC+3",
 043                    "UTC+3");
 44            }
 45        }
 046    }
 47}