< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 173
Coverable lines: 173
Total lines: 234
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.cctor()100%110%
GetYearInfo(...)0%440%
GetYear(...)100%110%
GetGregorianYear(...)100%110%
.ctor()100%110%
GetEra(...)100%110%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Private.CoreLib/src/System/Globalization/TaiwanLunisolarCalendar.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4namespace System.Globalization
 5{
 6    /// <remarks>
 7    /// Calendar support range:
 8    ///     Calendar            Minimum     Maximum
 9    ///     ==========          ==========  ==========
 10    ///     Gregorian           1912/02/18  2051/02/10
 11    ///     TaiwanLunisolar     1912/01/01  2050/13/29
 12    /// </remarks>
 13    public class TaiwanLunisolarCalendar : EastAsianLunisolarCalendar
 14    {
 15        // Since
 16        //    Gregorian Year = Era Year + yearOffset
 17        // When Gregorian Year 1912 is year 1, so that
 18        //    1912 = 1 + yearOffset
 19        //  So yearOffset = 1911
 020        private static readonly EraInfo[] s_taiwanLunisolarEraInfo =
 021        [
 022            new EraInfo(1, 1912, 1, 1, 1911, 1, GregorianCalendar.MaxYear - 1911)    // era #, start year/month/day, yea
 023        ];
 24
 25        private readonly GregorianCalendarHelper _helper;
 26
 27        private const int MinLunisolarYear = 1912;
 28        private const int MaxLunisolarYear = 2050;
 29
 030        private static readonly DateTime s_minDate = new DateTime(1912, 2, 18);
 031        private static readonly DateTime s_maxDate = new DateTime((new DateTime(2051, 2, 10, 23, 59, 59, 999)).Ticks + 9
 32
 033        public override DateTime MinSupportedDateTime => s_minDate;
 34
 035        public override DateTime MaxSupportedDateTime => s_maxDate;
 36
 37        protected override int DaysInYearBeforeMinSupportedYear =>
 38            // 1911 from ChineseLunisolarCalendar
 039            384;
 40
 041        private static readonly int[,] s_yinfo =
 042        {
 043             /*Y            LM        Lmon    Lday        DaysPerMonth    D1    D2    D3    D4    D5    D6    D7    D8  
 044             1912    */
 045           {    0,    2,    18,    42192    }, /*    30    29    30    29    29    30    29    29    30    30    29    3
 0461913    */ {    0,    2,    6,    53840    }, /*    30    30    29    30    29    29    30    29    29    30    29    30
 0471914    */ {    5,    1,    26,    54568    }, /*    30    30    29    30    29    30    29    30    29    29    30    2
 0481915    */ {    0,    2,    14,    46400    }, /*    30    29    30    30    29    30    29    30    29    30    29    2
 0491916    */ {    0,    2,    3,    54944    }, /*    30    30    29    30    29    30    30    29    30    29    30    29
 0501917    */ {    2,    1,    23,    38608    }, /*    30    29    29    30    29    30    30    29    30    30    29    3
 0511918    */ {    0,    2,    11,    38320    }, /*    30    29    29    30    29    30    29    30    30    29    30    3
 0521919    */ {    7,    2,    1,    18872    }, /*    29    30    29    29    30    29    29    30    30    29    30    30
 0531920    */ {    0,    2,    20,    18800    }, /*    29    30    29    29    30    29    29    30    29    30    30    3
 0541921    */ {    0,    2,    8,    42160    }, /*    30    29    30    29    29    30    29    29    30    29    30    30
 0551922    */ {    5,    1,    28,    45656    }, /*    30    29    30    30    29    29    30    29    29    30    29    3
 0561923    */ {    0,    2,    16,    27216    }, /*    29    30    30    29    30    29    30    29    29    30    29    3
 0571924    */ {    0,    2,    5,    27968    }, /*    29    30    30    29    30    30    29    30    29    30    29    29
 0581925    */ {    4,    1,    24,    44456    }, /*    30    29    30    29    30    30    29    30    30    29    30    2
 0591926    */ {    0,    2,    13,    11104    }, /*    29    29    30    29    30    29    30    30    29    30    30    2
 0601927    */ {    0,    2,    2,    38256    }, /*    30    29    29    30    29    30    29    30    29    30    30    30
 0611928    */ {    2,    1,    23,    18808    }, /*    29    30    29    29    30    29    29    30    29    30    30    3
 0621929    */ {    0,    2,    10,    18800    }, /*    29    30    29    29    30    29    29    30    29    30    30    3
 0631930    */ {    6,    1,    30,    25776    }, /*    29    30    30    29    29    30    29    29    30    29    30    3
 0641931    */ {    0,    2,    17,    54432    }, /*    30    30    29    30    29    30    29    29    30    29    30    2
 0651932    */ {    0,    2,    6,    59984    }, /*    30    30    30    29    30    29    30    29    29    30    29    30
 0661933    */ {    5,    1,    26,    27976    }, /*    29    30    30    29    30    30    29    30    29    30    29    2
 0671934    */ {    0,    2,    14,    23248    }, /*    29    30    29    30    30    29    30    29    30    30    29    3
 0681935    */ {    0,    2,    4,    11104    }, /*    29    29    30    29    30    29    30    30    29    30    30    29
 0691936    */ {    3,    1,    24,    37744    }, /*    30    29    29    30    29    29    30    30    29    30    30    3
 0701937    */ {    0,    2,    11,    37600    }, /*    30    29    29    30    29    29    30    29    30    30    30    2
 0711938    */ {    7,    1,    31,    51560    }, /*    30    30    29    29    30    29    29    30    29    30    30    2
 0721939    */ {    0,    2,    19,    51536    }, /*    30    30    29    29    30    29    29    30    29    30    29    3
 0731940    */ {    0,    2,    8,    54432    }, /*    30    30    29    30    29    30    29    29    30    29    30    29
 0741941    */ {    6,    1,    27,    55888    }, /*    30    30    29    30    30    29    30    29    29    30    29    3
 0751942    */ {    0,    2,    15,    46416    }, /*    30    29    30    30    29    30    29    30    29    30    29    3
 0761943    */ {    0,    2,    5,    22176    }, /*    29    30    29    30    29    30    30    29    30    29    30    29
 0771944    */ {    4,    1,    25,    43736    }, /*    30    29    30    29    30    29    30    29    30    30    29    3
 0781945    */ {    0,    2,    13,    9680    }, /*    29    29    30    29    29    30    29    30    30    30    29    30
 0791946    */ {    0,    2,    2,    37584    }, /*    30    29    29    30    29    29    30    29    30    30    29    30
 0801947    */ {    2,    1,    22,    51544    }, /*    30    30    29    29    30    29    29    30    29    30    29    3
 0811948    */ {    0,    2,    10,    43344    }, /*    30    29    30    29    30    29    29    30    29    30    29    3
 0821949    */ {    7,    1,    29,    46248    }, /*    30    29    30    30    29    30    29    29    30    29    30    2
 0831950    */ {    0,    2,    17,    27808    }, /*    29    30    30    29    30    30    29    29    30    29    30    2
 0841951    */ {    0,    2,    6,    46416    }, /*    30    29    30    30    29    30    29    30    29    30    29    30
 0851952    */ {    5,    1,    27,    21928    }, /*    29    30    29    30    29    30    29    30    30    29    30    2
 0861953    */ {    0,    2,    14,    19872    }, /*    29    30    29    29    30    30    29    30    30    29    30    2
 0871954    */ {    0,    2,    3,    42416    }, /*    30    29    30    29    29    30    29    30    30    29    30    30
 0881955    */ {    3,    1,    24,    21176    }, /*    29    30    29    30    29    29    30    29    30    29    30    3
 0891956    */ {    0,    2,    12,    21168    }, /*    29    30    29    30    29    29    30    29    30    29    30    3
 0901957    */ {    8,    1,    31,    43344    }, /*    30    29    30    29    30    29    29    30    29    30    29    3
 0911958    */ {    0,    2,    18,    59728    }, /*    30    30    30    29    30    29    29    30    29    30    29    3
 0921959    */ {    0,    2,    8,    27296    }, /*    29    30    30    29    30    29    30    29    30    29    30    29
 0931960    */ {    6,    1,    28,    44368    }, /*    30    29    30    29    30    30    29    30    29    30    29    3
 0941961    */ {    0,    2,    15,    43856    }, /*    30    29    30    29    30    29    30    30    29    30    29    3
 0951962    */ {    0,    2,    5,    19296    }, /*    29    30    29    29    30    29    30    30    29    30    30    29
 0961963    */ {    4,    1,    25,    42352    }, /*    30    29    30    29    29    30    29    30    29    30    30    3
 0971964    */ {    0,    2,    13,    42352    }, /*    30    29    30    29    29    30    29    30    29    30    30    3
 0981965    */ {    0,    2,    2,    21088    }, /*    29    30    29    30    29    29    30    29    29    30    30    29
 0991966    */ {    3,    1,    21,    59696    }, /*    30    30    30    29    30    29    29    30    29    29    30    3
 01001967    */ {    0,    2,    9,    55632    }, /*    30    30    29    30    30    29    29    30    29    30    29    30
 01011968    */ {    7,    1,    30,    23208    }, /*    29    30    29    30    30    29    30    29    30    29    30    2
 01021969    */ {    0,    2,    17,    22176    }, /*    29    30    29    30    29    30    30    29    30    29    30    2
 01031970    */ {    0,    2,    6,    38608    }, /*    30    29    29    30    29    30    30    29    30    30    29    30
 01041971    */ {    5,    1,    27,    19176    }, /*    29    30    29    29    30    29    30    29    30    30    30    2
 01051972    */ {    0,    2,    15,    19152    }, /*    29    30    29    29    30    29    30    29    30    30    29    3
 01061973    */ {    0,    2,    3,    42192    }, /*    30    29    30    29    29    30    29    29    30    30    29    30
 01071974    */ {    4,    1,    23,    53864    }, /*    30    30    29    30    29    29    30    29    29    30    30    2
 01081975    */ {    0,    2,    11,    53840    }, /*    30    30    29    30    29    29    30    29    29    30    29    3
 01091976    */ {    8,    1,    31,    54568    }, /*    30    30    29    30    29    30    29    30    29    29    30    2
 01101977    */ {    0,    2,    18,    46400    }, /*    30    29    30    30    29    30    29    30    29    30    29    2
 01111978    */ {    0,    2,    7,    46752    }, /*    30    29    30    30    29    30    30    29    30    29    30    29
 01121979    */ {    6,    1,    28,    38608    }, /*    30    29    29    30    29    30    30    29    30    30    29    3
 01131980    */ {    0,    2,    16,    38320    }, /*    30    29    29    30    29    30    29    30    30    29    30    3
 01141981    */ {    0,    2,    5,    18864    }, /*    29    30    29    29    30    29    29    30    30    29    30    30
 01151982    */ {    4,    1,    25,    42168    }, /*    30    29    30    29    29    30    29    29    30    29    30    3
 01161983    */ {    0,    2,    13,    42160    }, /*    30    29    30    29    29    30    29    29    30    29    30    3
 01171984    */ {    10,    2,    2,    45656    }, /*    30    29    30    30    29    29    30    29    29    30    29    3
 01181985    */ {    0,    2,    20,    27216    }, /*    29    30    30    29    30    29    30    29    29    30    29    3
 01191986    */ {    0,    2,    9,    27968    }, /*    29    30    30    29    30    30    29    30    29    30    29    29
 01201987    */ {    6,    1,    29,    44448    }, /*    30    29    30    29    30    30    29    30    30    29    30    2
 01211988    */ {    0,    2,    17,    43872    }, /*    30    29    30    29    30    29    30    30    29    30    30    2
 01221989    */ {    0,    2,    6,    38256    }, /*    30    29    29    30    29    30    29    30    29    30    30    30
 01231990    */ {    5,    1,    27,    18808    }, /*    29    30    29    29    30    29    29    30    29    30    30    3
 01241991    */ {    0,    2,    15,    18800    }, /*    29    30    29    29    30    29    29    30    29    30    30    3
 01251992    */ {    0,    2,    4,    25776    }, /*    29    30    30    29    29    30    29    29    30    29    30    30
 01261993    */ {    3,    1,    23,    27216    }, /*    29    30    30    29    30    29    30    29    29    30    29    3
 01271994    */ {    0,    2,    10,    59984    }, /*    30    30    30    29    30    29    30    29    29    30    29    3
 01281995    */ {    8,    1,    31,    27432    }, /*    29    30    30    29    30    29    30    30    29    29    30    2
 01291996    */ {    0,    2,    19,    23232    }, /*    29    30    29    30    30    29    30    29    30    30    29    2
 01301997    */ {    0,    2,    7,    43872    }, /*    30    29    30    29    30    29    30    30    29    30    30    29
 01311998    */ {    5,    1,    28,    37736    }, /*    30    29    29    30    29    29    30    30    29    30    30    2
 01321999    */ {    0,    2,    16,    37600    }, /*    30    29    29    30    29    29    30    29    30    30    30    2
 01332000    */ {    0,    2,    5,    51552    }, /*    30    30    29    29    30    29    29    30    29    30    30    29
 01342001    */ {    4,    1,    24,    54440    }, /*    30    30    29    30    29    30    29    29    30    29    30    2
 01352002    */ {    0,    2,    12,    54432    }, /*    30    30    29    30    29    30    29    29    30    29    30    2
 01362003    */ {    0,    2,    1,    55888    }, /*    30    30    29    30    30    29    30    29    29    30    29    30
 01372004    */ {    2,    1,    22,    23208    }, /*    29    30    29    30    30    29    30    29    30    29    30    2
 01382005    */ {    0,    2,    9,    22176    }, /*    29    30    29    30    29    30    30    29    30    29    30    29
 01392006    */ {    7,    1,    29,    43736    }, /*    30    29    30    29    30    29    30    29    30    30    29    3
 01402007    */ {    0,    2,    18,    9680    }, /*    29    29    30    29    29    30    29    30    30    30    29    30
 01412008    */ {    0,    2,    7,    37584    }, /*    30    29    29    30    29    29    30    29    30    30    29    30
 01422009    */ {    5,    1,    26,    51544    }, /*    30    30    29    29    30    29    29    30    29    30    29    3
 01432010    */ {    0,    2,    14,    43344    }, /*    30    29    30    29    30    29    29    30    29    30    29    3
 01442011    */ {    0,    2,    3,    46240    }, /*    30    29    30    30    29    30    29    29    30    29    30    29
 01452012    */ {    4,    1,    23,    46416    }, /*    30    29    30    30    29    30    29    30    29    30    29    3
 01462013    */ {    0,    2,    10,    44368    }, /*    30    29    30    29    30    30    29    30    29    30    29    3
 01472014    */ {    9,    1,    31,    21928    }, /*    29    30    29    30    29    30    29    30    30    29    30    2
 01482015    */ {    0,    2,    19,    19360    }, /*    29    30    29    29    30    29    30    30    30    29    30    2
 01492016    */ {    0,    2,    8,    42416    }, /*    30    29    30    29    29    30    29    30    30    29    30    30
 01502017    */ {    6,    1,    28,    21176    }, /*    29    30    29    30    29    29    30    29    30    29    30    3
 01512018    */ {    0,    2,    16,    21168    }, /*    29    30    29    30    29    29    30    29    30    29    30    3
 01522019    */ {    0,    2,    5,    43312    }, /*    30    29    30    29    30    29    29    30    29    29    30    30
 01532020    */ {    4,    1,    25,    29864    }, /*    29    30    30    30    29    30    29    29    30    29    30    2
 01542021    */ {    0,    2,    12,    27296    }, /*    29    30    30    29    30    29    30    29    30    29    30    2
 01552022    */ {    0,    2,    1,    44368    }, /*    30    29    30    29    30    30    29    30    29    30    29    30
 01562023    */ {    2,    1,    22,    19880    }, /*    29    30    29    29    30    30    29    30    30    29    30    2
 01572024    */ {    0,    2,    10,    19296    }, /*    29    30    29    29    30    29    30    30    29    30    30    2
 01582025    */ {    6,    1,    29,    42352    }, /*    30    29    30    29    29    30    29    30    29    30    30    3
 01592026    */ {    0,    2,    17,    42208    }, /*    30    29    30    29    29    30    29    29    30    30    30    2
 01602027    */ {    0,    2,    6,    53856    }, /*    30    30    29    30    29    29    30    29    29    30    30    29
 01612028    */ {    5,    1,    26,    59696    }, /*    30    30    30    29    30    29    29    30    29    29    30    3
 01622029    */ {    0,    2,    13,    54576    }, /*    30    30    29    30    29    30    29    30    29    29    30    3
 01632030    */ {    0,    2,    3,    23200    }, /*    29    30    29    30    30    29    30    29    30    29    30    29
 01642031    */ {    3,    1,    23,    27472    }, /*    29    30    30    29    30    29    30    30    29    30    29    3
 01652032    */ {    0,    2,    11,    38608    }, /*    30    29    29    30    29    30    30    29    30    30    29    3
 01662033    */ {    11,    1,    31,    19176    }, /*    29    30    29    29    30    29    30    29    30    30    30    
 01672034    */ {    0,    2,    19,    19152    }, /*    29    30    29    29    30    29    30    29    30    30    29    3
 01682035    */ {    0,    2,    8,    42192    }, /*    30    29    30    29    29    30    29    29    30    30    29    30
 01692036    */ {    6,    1,    28,    53848    }, /*    30    30    29    30    29    29    30    29    29    30    29    3
 01702037    */ {    0,    2,    15,    53840    }, /*    30    30    29    30    29    29    30    29    29    30    29    3
 01712038    */ {    0,    2,    4,    54560    }, /*    30    30    29    30    29    30    29    30    29    29    30    29
 01722039    */ {    5,    1,    24,    55968    }, /*    30    30    29    30    30    29    30    29    30    29    30    2
 01732040    */ {    0,    2,    12,    46496    }, /*    30    29    30    30    29    30    29    30    30    29    30    2
 01742041    */ {    0,    2,    1,    22224    }, /*    29    30    29    30    29    30    30    29    30    30    29    30
 01752042    */ {    2,    1,    22,    19160    }, /*    29    30    29    29    30    29    30    29    30    30    29    3
 01762043    */ {    0,    2,    10,    18864    }, /*    29    30    29    29    30    29    29    30    30    29    30    3
 01772044    */ {    7,    1,    30,    42168    }, /*    30    29    30    29    29    30    29    29    30    29    30    3
 01782045    */ {    0,    2,    17,    42160    }, /*    30    29    30    29    29    30    29    29    30    29    30    3
 01792046    */ {    0,    2,    6,    43600    }, /*    30    29    30    29    30    29    30    29    29    30    29    30
 01802047    */ {    5,    1,    26,    46376    }, /*    30    29    30    30    29    30    29    30    29    29    30    2
 01812048    */ {    0,    2,    14,    27936    }, /*    29    30    30    29    30    30    29    30    29    29    30    2
 01822049    */ {    0,    2,    2,    44448    }, /*    30    29    30    29    30    30    29    30    30    29    30    29
 01832050    */ {    3,    1,    23,    21936    }, /*    29    30    29    30    29    30    29    30    30    29    30    3
 0184        */ };
 185
 186
 0187        internal override int MinCalendarYear => MinLunisolarYear;
 188
 0189        internal override int MaxCalendarYear => MaxLunisolarYear;
 190
 0191        internal override DateTime MinDate => s_minDate;
 192
 0193        internal override DateTime MaxDate => s_maxDate;
 194
 0195        internal override EraInfo[]? CalEraInfo => s_taiwanLunisolarEraInfo;
 196
 197        internal override int GetYearInfo(int lunarYear, int index)
 198        {
 0199            if ((lunarYear < MinLunisolarYear) || (lunarYear > MaxLunisolarYear))
 200            {
 0201                throw new ArgumentOutOfRangeException(
 0202                    "year",
 0203                    lunarYear,
 0204                    SR.Format(SR.ArgumentOutOfRange_Range, MinLunisolarYear, MaxLunisolarYear));
 205            }
 206
 0207            return s_yinfo[lunarYear - MinLunisolarYear, index];
 208        }
 209
 210        internal override int GetYear(int year, DateTime time)
 211        {
 0212            return _helper.GetYear(year, time);
 213        }
 214
 215        internal override int GetGregorianYear(int year, int era)
 216        {
 0217            return _helper.GetGregorianYear(year, era);
 218        }
 219
 0220        public TaiwanLunisolarCalendar()
 221        {
 0222            _helper = new GregorianCalendarHelper(this, s_taiwanLunisolarEraInfo);
 0223        }
 224
 0225        public override int GetEra(DateTime time) => _helper.GetEra(time);
 226
 0227        internal override CalendarId BaseCalendarID => CalendarId.TAIWAN;
 228
 0229        internal override CalendarId ID => CalendarId.TAIWANLUNISOLAR;
 230
 0231        public override int[] Eras => _helper.Eras;
 232    }
 233}
 234