use crate::instant::UtcInstant;
pub(crate) const FIRST_YEAR: i32 = 1900;
#[rustfmt::skip]
pub(crate) const JIE: [[u32; 12]; 201] = [
[6844, 49311, 92182, 135713, 179995, 224919, 270190, 315411, 360197, 404293, 447640, 490376], [532793, 575260, 618131, 661664, 705950, 750876, 796148, 841366, 886150, 930246, 973594, 1016333], [1058752, 1101218, 1144088, 1187617, 1231899, 1276820, 1322086, 1367302, 1412086, 1456185, 1499538, 1542281], [1584704, 1627171, 1670039, 1713566, 1757845, 1802767, 1848037, 1893256, 1938042, 1982142, 2025493, 2068235], [2110657, 2153124, 2195992, 2239519, 2283799, 2328721, 2373992, 2419212, 2463998, 2508096, 2551445, 2594185], [2636607, 2679076, 2721946, 2765474, 2809754, 2854674, 2899940, 2945157, 2989942, 3034040, 3077390, 3120131], [3162553, 3205024, 3247896, 3291427, 3335708, 3380629, 3425895, 3471112, 3515896, 3559995, 3603347, 3646089], [3688511, 3730979, 3773847, 3817375, 3861654, 3906573, 3951839, 3997056, 4041842, 4085943, 4129296, 4172039], [4214461, 4256927, 4299794, 4343320, 4387598, 4432519, 4477788, 4523007, 4567792, 4611891, 4655242, 4697984], [4740405, 4782873, 4825741, 4869269, 4913551, 4958474, 5003744, 5048962, 5093747, 5137843, 5181193, 5223935], [5266358, 5308827, 5351697, 5395223, 5439499, 5484416, 5529681, 5574897, 5619682, 5663781, 5707133, 5749877], [5792301, 5834770, 5877639, 5921164, 5965440, 6010358, 6055625, 6100844, 6145633, 6189735, 6233087, 6275828], [6318247, 6360714, 6403581, 6447108, 6491387, 6536307, 6581577, 6626797, 6671586, 6715687, 6759039, 6801779], [6844198, 6886663, 6929529, 6973056, 7017335, 7062253, 7107519, 7152736, 7197522, 7241624, 7284978, 7327721], [7370143, 7412609, 7455476, 7499002, 7543280, 7588200, 7633467, 7678685, 7723472, 7767575, 7810931, 7853677], [7896100, 7938565, 7981428, 8024949, 8069223, 8114140, 8159408, 8204628, 8249417, 8293521, 8336878, 8379624], [8422048, 8464514, 8507377, 8550898, 8595170, 8640086, 8685354, 8730575, 8775365, 8819468, 8862822, 8905566], [8947989, 8990458, 9033325, 9076850, 9121126, 9166043, 9211310, 9256530, 9301319, 9345422, 9388777, 9431521], [9473944, 9516413, 9559281, 9602805, 9647078, 9691991, 9737252, 9782467, 9827255, 9871360, 9914719, 9957466], [9999891, 10042359, 10085225, 10128749, 10173022, 10217937, 10263201, 10308418, 10353208, 10397313, 10440672, 10483418], [10525841, 10568306, 10611171, 10654695, 10698971, 10743890, 10789159, 10834378, 10879167, 10923269, 10966625, 11009370], [11051794, 11094260, 11137125, 11180649, 11224924, 11269841, 11315107, 11360323, 11405110, 11449211, 11492565, 11535311], [11577737, 11620206, 11663074, 11706598, 11750873, 11795790, 11841057, 11886277, 11931066, 11975169, 12018525, 12061271], [12103694, 12146160, 12189024, 12232546, 12276818, 12321734, 12367002, 12412224, 12457017, 12501123, 12544480, 12587225], [12629646, 12672110, 12714972, 12758493, 12802766, 12847682, 12892949, 12938172, 12982966, 13027072, 13070429, 13113173], [13155593, 13198057, 13240920, 13284442, 13328718, 13373636, 13418905, 13464127, 13508920, 13553027, 13596386, 13639132], [13681554, 13724018, 13766880, 13810398, 13854668, 13899582, 13944846, 13990064, 14034856, 14078965, 14122328, 14165079], [14207505, 14249970, 14292830, 14336346, 14380613, 14425525, 14470790, 14516011, 14560805, 14604915, 14648277, 14691026], [14733451, 14775916, 14818777, 14862295, 14906563, 14951477, 14996744, 15041967, 15086762, 15130870, 15174229, 15216977], [15259402, 15301869, 15344732, 15388251, 15432520, 15477431, 15522692, 15567909, 15612700, 15656807, 15700167, 15742916], [15785343, 15827811, 15870677, 15914197, 15958467, 16003378, 16048640, 16093857, 16138648, 16182757, 16226120, 16268871], [16311296, 16353761, 16396622, 16440140, 16484410, 16529322, 16574586, 16619805, 16664597, 16708707, 16752070, 16794820], [16837245, 16879709, 16922569, 16966086, 17010355, 17055268, 17100532, 17145752, 17190543, 17234650, 17278010, 17320758], [17363183, 17405649, 17448511, 17492030, 17536302, 17581217, 17626484, 17671706, 17716497, 17760604, 17803963, 17846711], [17889136, 17931604, 17974466, 18017984, 18062251, 18107161, 18152424, 18197644, 18242436, 18286545, 18329907, 18372657], [18415082, 18457549, 18500410, 18543926, 18588192, 18633102, 18678366, 18723588, 18768384, 18812496, 18855858, 18898605], [18941027, 18983489, 19026349, 19069867, 19114136, 19159051, 19204318, 19249543, 19294341, 19338452, 19381815, 19424562], [19466984, 19509446, 19552304, 19595821, 19640091, 19685003, 19730266, 19775485, 19820279, 19864391, 19907755, 19950506], [19992931, 20035395, 20078254, 20121769, 20166035, 20210947, 20256211, 20301433, 20346228, 20390341, 20433708, 20476462], [20518888, 20561350, 20604206, 20647717, 20691981, 20736892, 20782158, 20827383, 20872182, 20916297, 20959664, 21002417], [21044844, 21087308, 21130164, 21173675, 21217936, 21262844, 21308108, 21353331, 21398129, 21442242, 21485607, 21528358], [21570784, 21613250, 21656110, 21699625, 21743890, 21788799, 21834063, 21879286, 21924084, 21968198, 22011564, 22054316], [22096742, 22139209, 22182069, 22225584, 22269847, 22314753, 22360012, 22405230, 22450026, 22494142, 22537511, 22580267], [22622695, 22665160, 22708019, 22751531, 22795793, 22840699, 22885959, 22931178, 22975975, 23020090, 23063459, 23106213], [23148639, 23191103, 23233960, 23277474, 23321740, 23366651, 23411916, 23457139, 23501936, 23546049, 23589415, 23632168], [23674594, 23717059, 23759918, 23803432, 23847697, 23892605, 23937867, 23983085, 24027878, 24071989, 24115354, 24158108], [24200536, 24243004, 24285865, 24329379, 24373641, 24418549, 24463811, 24509032, 24553827, 24597941, 24641307, 24684060], [24726486, 24768950, 24811808, 24855320, 24899583, 24944491, 24989756, 25034981, 25079781, 25123897, 25167264, 25210016], [25252440, 25294902, 25337758, 25381269, 25425532, 25470440, 25515703, 25560926, 25605725, 25649840, 25693207, 25735958], [25778381, 25820843, 25863699, 25907212, 25951477, 25996387, 26041652, 26086875, 26131674, 26175791, 26219160, 26261913], [26304339, 26346801, 26389655, 26433164, 26477425, 26522331, 26567593, 26612815, 26657614, 26701732, 26745104, 26787862], [26830290, 26872753, 26915607, 26959113, 27003369, 27048273, 27093534, 27138757, 27183558, 27227676, 27271047, 27313802], [27356230, 27398693, 27441547, 27485055, 27529314, 27574220, 27619485, 27664711, 27709514, 27753632, 27797002, 27839756], [27882182, 27924646, 27967502, 28011013, 28055272, 28100176, 28145435, 28190655, 28235453, 28279570, 28322941, 28365697], [28408125, 28450591, 28493449, 28536959, 28581218, 28626121, 28671379, 28716599, 28761398, 28805517, 28848891, 28891648], [28934076, 28976538, 29019391, 29062899, 29107158, 29152063, 29197326, 29242550, 29287352, 29331472, 29374845, 29417603], [29460030, 29502492, 29545344, 29588851, 29633110, 29678016, 29723278, 29768500, 29813299, 29857416, 29900786, 29943542], [29985970, 30028435, 30071290, 30114799, 30159058, 30203965, 30249228, 30294452, 30339252, 30383370, 30426740, 30469496], [30511924, 30554389, 30597245, 30640752, 30685009, 30729912, 30775173, 30820397, 30865199, 30909319, 30952692, 30995450], [31037878, 31080342, 31123197, 31166703, 31210959, 31255860, 31301120, 31346344, 31391148, 31435270, 31478642, 31521397], [31563822, 31606283, 31649136, 31692644, 31736903, 31781809, 31827073, 31872300, 31917105, 31961229, 32004602, 32047358], [32089783, 32132242, 32175095, 32218602, 32262861, 32307766, 32353027, 32398248, 32443049, 32487171, 32530546, 32573306], [32615735, 32658197, 32701050, 32744554, 32788809, 32833711, 32878971, 32924194, 32968995, 33013118, 33056495, 33099257], [33141686, 33184148, 33226997, 33270499, 33314752, 33359654, 33404918, 33450145, 33494952, 33539076, 33582452, 33625213], [33667642, 33710105, 33752956, 33796458, 33840711, 33885612, 33930872, 33976096, 34020899, 34065022, 34108395, 34151153], [34193582, 34236046, 34278901, 34322407, 34366662, 34411562, 34456821, 34502045, 34546848, 34590971, 34634347, 34677106], [34719534, 34761998, 34804851, 34848356, 34892610, 34937510, 34982767, 35027989, 35072792, 35116917, 35160295, 35203058], [35245488, 35287951, 35330802, 35374305, 35418557, 35463456, 35508713, 35553935, 35598738, 35642861, 35686237, 35728997], [35771426, 35813887, 35856738, 35900241, 35944496, 35989399, 36034662, 36079887, 36124691, 36168814, 36212189, 36254948], [36297377, 36339839, 36382691, 36426195, 36470450, 36515351, 36560612, 36605834, 36650635, 36694757, 36738131, 36780891], [36823322, 36865786, 36908638, 36952142, 36996394, 37041292, 37086551, 37131774, 37176578, 37220702, 37264078, 37306837], [37349265, 37391725, 37434575, 37478076, 37522328, 37567229, 37612491, 37657720, 37702530, 37746659, 37790037, 37832796], [37875222, 37917680, 37960528, 38004029, 38048281, 38093182, 38138443, 38183668, 38228475, 38272602, 38315979, 38358739], [38401165, 38443624, 38486473, 38529974, 38574226, 38619127, 38664387, 38709613, 38754419, 38798547, 38841928, 38884690], [38927120, 38969580, 39012427, 39055925, 39100174, 39145072, 39190331, 39235557, 39280365, 39324495, 39367878, 39410645], [39453078, 39495539, 39538386, 39581881, 39626127, 39671022, 39716279, 39761505, 39806313, 39850442, 39893823, 39936586], [39979017, 40021479, 40064328, 40107826, 40152074, 40196971, 40242231, 40287458, 40332268, 40376398, 40419779, 40462541], [40504971, 40547433, 40590284, 40633786, 40678036, 40722932, 40768188, 40813410, 40858216, 40902344, 40945726, 40988491], [41030923, 41073387, 41116238, 41159739, 41203989, 41248883, 41294137, 41339358, 41384162, 41428291, 41471674, 41514440], [41556872, 41599332, 41642180, 41685678, 41729927, 41774825, 41820085, 41865311, 41910120, 41954250, 41997633, 42040398], [42082829, 42125289, 42168136, 42211635, 42255884, 42300784, 42346044, 42391269, 42436073, 42480199, 42523578, 42566341], [42608773, 42651235, 42694085, 42737585, 42781835, 42826733, 42871992, 42917217, 42962023, 43006150, 43049528, 43092291], [43134723, 43177185, 43220035, 43263533, 43307780, 43352676, 43397935, 43443162, 43487972, 43532102, 43575484, 43618248], [43660679, 43703140, 43745987, 43789484, 43833731, 43878626, 43923883, 43969110, 44013920, 44058051, 44101432, 44144194], [44186621, 44229079, 44271925, 44315422, 44359671, 44404569, 44449829, 44495058, 44539870, 44584003, 44627386, 44670148], [44712575, 44755032, 44797876, 44841374, 44885623, 44930520, 44975779, 45021004, 45065813, 45109945, 45153329, 45196096], [45238528, 45280988, 45323832, 45367326, 45411571, 45456464, 45501721, 45546946, 45591755, 45635887, 45679273, 45722041], [45764473, 45806932, 45849774, 45893264, 45937506, 45982399, 46027659, 46072889, 46117704, 46161840, 46205226, 46247992], [46290424, 46332883, 46375727, 46419219, 46463462, 46508355, 46553613, 46598840, 46643652, 46687784, 46731169, 46773934], [46816366, 46858827, 46901674, 46945170, 46989414, 47034305, 47079559, 47124784, 47169594, 47213727, 47257114, 47299881], [47342313, 47384774, 47427619, 47471113, 47515355, 47560246, 47605500, 47650726, 47695537, 47739674, 47783063, 47825834], [47868268, 47910728, 47953572, 47997065, 48041307, 48086198, 48131453, 48176677, 48221487, 48265621, 48309008, 48351776], [48394209, 48436668, 48479512, 48523005, 48567249, 48612142, 48657400, 48702627, 48747438, 48791571, 48834957, 48877724], [48920157, 48962617, 49005463, 49048957, 49093202, 49138095, 49183352, 49228578, 49273388, 49317520, 49360906, 49403674], [49446108, 49488571, 49531418, 49574912, 49619154, 49664045, 49709299, 49754524, 49799335, 49843469, 49886856, 49929623], [49972054, 50014513, 50057356, 50100848, 50145090, 50189982, 50235241, 50280472, 50325289, 50369427, 50412816, 50455582], [50498011, 50540468, 50583310, 50626802, 50671046, 50715941, 50761200, 50806429, 50851242, 50895379, 50938767, 50981534], [51023964, 51066422, 51109264, 51152756, 51196999, 51241893, 51287149, 51332376, 51377189, 51421325, 51464715, 51507485], [51549918, 51592377, 51635217, 51678705, 51722943, 51767833, 51813090, 51858320, 51903136, 51947276, 51990668, 52033442], [52075877, 52118337, 52161178, 52204665, 52248901, 52293789, 52339045, 52384274, 52429090, 52473228, 52516618, 52559387], [52601821, 52644280, 52687123, 52730612, 52774850, 52819739, 52864994, 52910223, 52955039, 52999178, 53042568, 53085337], [53127769, 53170229, 53213072, 53256564, 53300805, 53345694, 53390947, 53436172, 53480986, 53525125, 53568517, 53611289], [53653724, 53696184, 53739028, 53782518, 53826757, 53871645, 53916896, 53962119, 54006931, 54051069, 54094462, 54137234], [54179668, 54222125, 54264965, 54308452, 54352690, 54397580, 54442836, 54488064, 54532880, 54577021, 54620413, 54663185], [54705619, 54748076, 54790916, 54834403, 54878642, 54923534, 54968791, 55014020, 55058833, 55102969, 55146359, 55189129], [55231563, 55274023, 55316865, 55360354, 55404593, 55449482, 55494737, 55539963, 55584777, 55628913, 55672302, 55715073], [55757507, 55799967, 55842809, 55886295, 55930531, 55975417, 56020671, 56065901, 56110719, 56154861, 56198255, 56241027], [56283460, 56325918, 56368758, 56412245, 56456480, 56501367, 56546622, 56591851, 56636669, 56680811, 56724204, 56766974], [56809405, 56851860, 56894699, 56938186, 56982423, 57027312, 57072567, 57117796, 57162614, 57206757, 57250151, 57292922], [57335354, 57377810, 57420648, 57464134, 57508371, 57553259, 57598513, 57643741, 57688558, 57732700, 57776096, 57818872], [57861309, 57903768, 57946606, 57990090, 58034324, 58079209, 58124462, 58169689, 58214505, 58258646, 58302042, 58344818], [58387255, 58429713, 58472550, 58516032, 58560263, 58605147, 58650402, 58695633, 58740454, 58784599, 58827995, 58870769], [58913204, 58955662, 58998501, 59041986, 59086220, 59131106, 59176361, 59221591, 59266409, 59310552, 59353946, 59396719], [59439154, 59481613, 59524455, 59567942, 59612178, 59657063, 59702315, 59747540, 59792356, 59836498, 59879894, 59922669], [59965104, 60007563, 60050402, 60093887, 60138119, 60183003, 60228255, 60273482, 60318301, 60362448, 60405847, 60448624], [60491061, 60533518, 60576356, 60619839, 60664073, 60708958, 60754212, 60799441, 60844260, 60888403, 60931799, 60974573], [61017008, 61059466, 61102304, 61145788, 61190022, 61234909, 61280163, 61325393, 61370211, 61414353, 61457748, 61500521], [61542956, 61585414, 61628253, 61671737, 61715971, 61760857, 61806111, 61851340, 61896159, 61940302, 61983698, 62026473], [62068909, 62111368, 62154208, 62197693, 62241925, 62286809, 62332062, 62377291, 62422110, 62466255, 62509652, 62552426], [62594859, 62637314, 62680150, 62723631, 62767863, 62812746, 62858001, 62903233, 62948057, 62992206, 63035604, 63078378], [63120810, 63163263, 63206097, 63249578, 63293811, 63338698, 63383954, 63429186, 63474008, 63518155, 63561554, 63604330], [63646763, 63689219, 63732054, 63775535, 63819767, 63864652, 63909905, 63955134, 63999953, 64044099, 64087499, 64130277], [64172714, 64215171, 64258004, 64301480, 64345706, 64390586, 64435838, 64481069, 64525892, 64570042, 64613445, 64656226], [64698665, 64741123, 64783956, 64827433, 64871659, 64916538, 64961791, 65007023, 65051847, 65095996, 65139396, 65182173], [65224609, 65267067, 65309903, 65353382, 65397610, 65442490, 65487740, 65532969, 65577791, 65621940, 65665340, 65708117], [65750553, 65793010, 65835847, 65879329, 65923557, 65968437, 66013685, 66058912, 66103732, 66147881, 66191284, 66234065], [66276503, 66318962, 66361799, 66405280, 66449509, 66494388, 66539637, 66584863, 66629681, 66673829, 66717232, 66760013], [66802450, 66844906, 66887740, 66931217, 66975445, 67020326, 67065577, 67110807, 67155628, 67199777, 67243179, 67285958], [67328395, 67370851, 67413685, 67457163, 67501392, 67546276, 67591530, 67636761, 67681582, 67725729, 67769127, 67811905], [67854342, 67896801, 67939638, 67983118, 68027348, 68072230, 68117482, 68162712, 68207532, 68251678, 68295077, 68337854], [68380291, 68422748, 68465583, 68509061, 68553286, 68598165, 68643415, 68688647, 68733473, 68777625, 68821029, 68863808], [68906243, 68948698, 68991531, 69035008, 69079235, 69124116, 69169369, 69214603, 69259430, 69303583, 69346986, 69389763], [69432196, 69474649, 69517480, 69560958, 69605186, 69650068, 69695321, 69740553, 69785378, 69829530, 69872934, 69915713], [69958148, 70000602, 70043432, 70086908, 70131134, 70176013, 70221265, 70266496, 70311320, 70355474, 70398881, 70441665], [70484105, 70526561, 70569392, 70612866, 70657089, 70701967, 70747218, 70792449, 70837274, 70881427, 70924834, 70967617], [71010056, 71052512, 71095342, 71138814, 71183035, 71227911, 71273161, 71318394, 71363223, 71407378, 71450784, 71493566], [71536004, 71578460, 71621292, 71664766, 71708989, 71753867, 71799118, 71844349, 71889175, 71933329, 71976735, 72019516], [72061954, 72104412, 72147246, 72190724, 72234949, 72279827, 72325075, 72370303, 72415126, 72459278, 72502684, 72545467], [72587907, 72630364, 72673196, 72716669, 72760891, 72805766, 72851013, 72896241, 72941066, 72985222, 73028631, 73071416], [73113857, 73156313, 73199143, 73242616, 73286838, 73331716, 73376966, 73422198, 73467024, 73511177, 73554583, 73597365], [73639804, 73682260, 73725091, 73768566, 73812789, 73857668, 73902919, 73948150, 73992974, 74037126, 74080529, 74123310], [74165748, 74208205, 74251038, 74294513, 74338735, 74383610, 74428859, 74474089, 74518914, 74563067, 74606473, 74649256], [74691695, 74734153, 74776986, 74820461, 74864683, 74909558, 74954807, 75000039, 75044866, 75089021, 75132428, 75175209], [75217645, 75260099, 75302928, 75346400, 75390622, 75435498, 75480748, 75525981, 75570810, 75614968, 75658376, 75701157], [75743593, 75786044, 75828872, 75872343, 75916566, 75961444, 76006696, 76051929, 76096757, 76140913, 76184322, 76227105], [76269543, 76311996, 76354825, 76398297, 76442520, 76487397, 76532648, 76577880, 76622706, 76666861, 76710270, 76753056], [76795496, 76837951, 76880778, 76924245, 76968461, 77013332, 77058580, 77103813, 77148643, 77192802, 77236214, 77279001], [77321442, 77363898, 77406725, 77450193, 77494409, 77539281, 77584531, 77629766, 77674598, 77718758, 77762167, 77804951], [77847389, 77889845, 77932674, 77976145, 78020365, 78065238, 78110487, 78155719, 78200548, 78244707, 78288117, 78330901], [78373339, 78415793, 78458623, 78502094, 78546313, 78591184, 78636429, 78681658, 78726486, 78770645, 78814059, 78856847], [78899288, 78941744, 78984573, 79028043, 79072262, 79117135, 79162382, 79207613, 79252441, 79296600, 79340014, 79382802], [79425242, 79467696, 79510522, 79553990, 79598207, 79643081, 79688330, 79733562, 79778391, 79822551, 79865962, 79908749], [79951189, 79993643, 80036470, 80079937, 80124155, 80169030, 80214280, 80259513, 80304342, 80348500, 80391910, 80434696], [80477136, 80519593, 80562423, 80605895, 80650114, 80694988, 80740237, 80785470, 80830299, 80874456, 80917866, 80960652], [81003093, 81045548, 81088376, 81131843, 81176058, 81220928, 81266174, 81311407, 81356240, 81400402, 81443817, 81486604], [81529043, 81571496, 81614322, 81657789, 81702004, 81746876, 81792125, 81837361, 81882196, 81926359, 81969773, 82012559], [82054996, 82097447, 82140272, 82183740, 82227958, 82272833, 82318083, 82363316, 82408148, 82452309, 82495724, 82538511], [82580950, 82623403, 82666227, 82709693, 82753907, 82798777, 82844023, 82889254, 82934084, 82978246, 83021663, 83064455], [83106899, 83149355, 83192180, 83235644, 83279856, 83324725, 83369972, 83415206, 83460038, 83504202, 83547617, 83590407], [83632850, 83675304, 83718129, 83761593, 83805804, 83850673, 83895919, 83941153, 83985987, 84030151, 84073566, 84116354], [84158794, 84201249, 84244074, 84287540, 84331753, 84376622, 84421868, 84467100, 84511931, 84556094, 84599509, 84642298], [84684739, 84727194, 84770022, 84813491, 84857707, 84902577, 84947823, 84993053, 85037883, 85082045, 85125460, 85168251], [85210693, 85253147, 85295972, 85339436, 85383648, 85428515, 85473759, 85518989, 85563821, 85607985, 85651403, 85694195], [85736638, 85779092, 85821915, 85865377, 85909589, 85954458, 85999706, 86044941, 86089774, 86133937, 86177353, 86220141], [86262582, 86305035, 86347860, 86391325, 86435539, 86480411, 86525660, 86570895, 86615727, 86659888, 86703302, 86746090], [86788530, 86830984, 86873810, 86917274, 86961486, 87006353, 87051597, 87096830, 87141662, 87185826, 87229243, 87272033], [87314475, 87356930, 87399755, 87443218, 87487429, 87532296, 87577542, 87622777, 87667614, 87711781, 87755200, 87797989], [87840428, 87882878, 87925699, 87969161, 88013373, 88058242, 88103490, 88148726, 88193563, 88237732, 88281151, 88323941], [88366380, 88408830, 88451649, 88495110, 88539321, 88584190, 88629437, 88674672, 88719506, 88763674, 88807094, 88849887], [88892329, 88934781, 88977603, 89021065, 89065275, 89110144, 89155392, 89200627, 89245461, 89289628, 89333048, 89375843], [89418288, 89460742, 89503563, 89547020, 89591225, 89636089, 89681333, 89726567, 89771404, 89815574, 89858996, 89901791], [89944237, 89986691, 90029513, 90072971, 90117176, 90162039, 90207283, 90252520, 90297359, 90341529, 90384949, 90427741], [90470184, 90512638, 90555462, 90598924, 90643134, 90688001, 90733246, 90778480, 90823316, 90867484, 90910905, 90953697], [90996140, 91038593, 91081417, 91124880, 91169088, 91213951, 91259192, 91304421, 91349254, 91393422, 91436845, 91479641], [91522087, 91564542, 91607365, 91650826, 91695034, 91739898, 91785142, 91830374, 91875209, 91919378, 91962800, 92005595], [92048039, 92090491, 92133312, 92176772, 92220980, 92265847, 92311094, 92356329, 92401165, 92445332, 92488752, 92531545], [92573988, 92616441, 92659262, 92702721, 92746929, 92791795, 92837041, 92882275, 92927110, 92971276, 93014694, 93057486], [93099929, 93142384, 93185208, 93228670, 93272879, 93317745, 93362992, 93408227, 93453064, 93497232, 93540651, 93583443], [93625886, 93668338, 93711159, 93754617, 93798822, 93843686, 93888930, 93934165, 93979005, 94023177, 94066600, 94109394], [94151834, 94194284, 94237102, 94280558, 94324763, 94369627, 94414873, 94460110, 94504951, 94549124, 94592548, 94635341], [94677781, 94720229, 94763046, 94806504, 94850712, 94895579, 94940827, 94986064, 95030903, 95075075, 95118500, 95161295], [95203737, 95246187, 95289004, 95332458, 95376661, 95421522, 95466764, 95511998, 95556836, 95601008, 95644434, 95687233], [95729680, 95772133, 95814951, 95858404, 95902604, 95947463, 95992706, 96037942, 96082784, 96126959, 96170385, 96213183], [96255627, 96298079, 96340897, 96384351, 96428553, 96473413, 96518657, 96563894, 96608736, 96652911, 96696337, 96739133], [96781576, 96824028, 96866846, 96910302, 96954504, 96999364, 97044605, 97089837, 97134675, 97178848, 97222275, 97265072], [97307517, 97349971, 97392792, 97436249, 97480454, 97525316, 97570557, 97615791, 97660629, 97704802, 97748229, 97791028], [97833475, 97875928, 97918745, 97962199, 98006400, 98051260, 98096501, 98141735, 98186574, 98230748, 98274177, 98316977], [98359424, 98401876, 98444693, 98488146, 98532346, 98577206, 98622449, 98667685, 98712526, 98756699, 98800124, 98842922], [98885366, 98927819, 98970638, 99014094, 99058298, 99103161, 99148407, 99193645, 99238485, 99282658, 99326082, 99368878], [99411322, 99453776, 99496596, 99540052, 99584253, 99629112, 99674352, 99719586, 99764425, 99808599, 99852026, 99894824], [99937270, 99979723, 100022543, 100065997, 100110198, 100155056, 100200298, 100245534, 100290377, 100334555, 100377984, 100420781], [100463223, 100505672, 100548488, 100591941, 100636144, 100681007, 100726252, 100771491, 100816335, 100860513, 100903942, 100946740], [100989182, 101031630, 101074444, 101117896, 101162098, 101206959, 101252202, 101297437, 101342278, 101386453, 101429882, 101472682], [101515128, 101557580, 101600396, 101643848, 101688048, 101732908, 101778152, 101823389, 101868231, 101912407, 101955837, 101998639], [102041086, 102083538, 102126353, 102169801, 102213997, 102258853, 102304095, 102349333, 102394177, 102438357, 102481788, 102524589], [102567036, 102609488, 102652303, 102695752, 102739947, 102784802, 102830042, 102875280, 102920125, 102964304, 103007734, 103050533], [103092977, 103135428, 103178245, 103221697, 103265897, 103310756, 103355998, 103401235, 103446078, 103490257, 103533687, 103576487], [103618932, 103661383, 103704200, 103747652, 103791850, 103836705, 103881943, 103927174, 103972014, 104016192, 104059625, 104102429], [104144878, 104187330, 104230145, 104273595, 104317790, 104362645, 104407884, 104453118, 104497960, 104542139, 104585572, 104628374], [104670821, 104713271, 104756084, 104799533, 104843731, 104888589, 104933833, 104979072, 105023916, 105068094, 105111524, 105154325], [105196771, 105239222, 105282036, 105325485, 105369682, 105414540, 105459781, 105505016, 105549857, 105594033, 105637462, 105680262], ];
const EPOCH_MICROS: i64 = -2_208_988_800_000_000;
fn instant(minutes: u32) -> UtcInstant {
UtcInstant::from_micros(EPOCH_MICROS + i64::from(minutes) * 60_000_000)
}
pub(crate) fn jie_before(moment: UtcInstant) -> Option<(usize, i32, UtcInstant)> {
let (y, ..) = moment.civil();
for year in [y, y - 1] {
let index = usize::try_from(year - FIRST_YEAR).ok()?;
let Some(row) = JIE.get(index) else { continue };
if let Some(i) = (0..12).rev().find(|&i| instant(row[i]) <= moment) {
return Some((i, year, instant(row[i])));
}
}
None
}
#[cfg(test)]
mod tests {
use super::*;
use crate::chinese::calendar::jie_of_year;
use crate::test_kernel::full_kernel as kernels;
fn minutes(jd: f64) -> u32 {
((jd - 2_415_020.5) * 1440.0).round() as u32
}
#[test]
#[ignore = "generates the table: cargo test --release jie_table::tests::print_table -- --ignored --nocapture"]
fn print_table() {
let kernels = kernels().expect("kernels/de440s.bsp");
for year in FIRST_YEAR..=2100 {
let row = jie_of_year(&kernels, year).unwrap().map(minutes);
let cells: Vec<String> = row.iter().map(u32::to_string).collect();
println!(" [{}], // {year}", cells.join(", "));
}
}
#[test]
fn the_table_matches_the_search() {
let Some(kernels) = kernels() else { return };
assert_eq!(JIE.len(), 201);
for (i, row) in JIE.iter().enumerate() {
let year = FIRST_YEAR + i as i32;
assert_eq!(
*row,
jie_of_year(&kernels, year).unwrap().map(minutes),
"{year}"
);
}
}
#[test]
fn known_jie() {
let moment = UtcInstant::parse("2024-02-04T08:28:00Z").unwrap();
let (index, year, at) = jie_before(moment).unwrap();
assert_eq!((index, year), (1, 2024));
assert!(moment.seconds_since(&at) < 120.0, "{}", at.isoformat());
let (index, year, _) =
jie_before(UtcInstant::parse("2024-01-01T00:00:00Z").unwrap()).unwrap();
assert_eq!((index, year), (11, 2023));
assert!(jie_before(UtcInstant::parse("1899-12-31T00:00:00Z").unwrap()).is_none());
}
}