Module: Wareki::Calendar

Defined in:
lib/wareki/calendar.rb,
lib/wareki/calendar_def.rb

Overview

旧暦テーブルの参照ロジック。1年分の旧暦情報は整数1個 (40bit) に ビットパックされている。PACKED[西暦年 - YEAR_MIN]:

bits 0..21  : その年の最初の月の初日のユリウス通日 (JD)
bits 22..34 : 月の大小マスク (bit i = i 番目の月が大の月 = 30日)
bit  35     : 閏月を含む13ヶ月の年なら1
bits 36..39 : 閏月の月番号 (1..12、閏月がなければ0)

明治5年12月 (テーブル最終月) はグレゴリオ暦切替のため LAST_MONTH_DAYS (= 2) 日で打ち切られており、大小マスクには反映されていない。

Constant Summary collapse

YEAR_MIN =
445
YEAR_MAX =
1872
JD_MIN =
1883618
JD_MAX =
2405159
LAST_MONTH_DAYS =
2
PACKED =
[
    0x5d555cbde2, 0x01555cbf62, 0x02ad5cc0c4, 0x2daa9cc227, 0x02aa9cc3a7, 0xad555cc509,
    0x01569cc689, 0x02d55cc7eb, 0x6eaa9cc94e, 0x02aa9ccace, 0x01559ccc30, 0x3ab55ccd92,
    0x03555ccf12, 0xcaaa9cd075, 0x02ab5cd1f4, 0x015a9cd357, 0x9b555cd4b9, 0x01555cd639,
    0x02ab5cd79b, 0x5d5a9cd8fe, 0x01aa9cda7e, 0x01555cdbe0, 0x1aab5cdd42, 0x02ad5cdec2,
    0xbdaa9ce025, 0x02aa9ce1a5, 0x01559ce307, 0x7aad5ce469, 0x02d55ce5e9, 0x02aa9ce74c,
    0x3d559ce8ae, 0x01569cea2e, 0xcad55ceb90, 0x01555ced10, 0x02aadcee72, 0x9d569cefd5,
    0x016a9cf155, 0x01555cf2b7, 0x5aaadcf419, 0x02ab5cf599, 0x016a9cf6fc, 0x1d555cf85e,
    0x01555cf9de, 0xaaab5cfb40, 0x02b55cfcc0, 0x02aa9cfe23, 0x7d555cff85, 0x01559d0105,
    0x02b55d0267, 0x4eaa9d03ca, 0x02aa9d054a, 0xcd559d06ac, 0x015a9d082c, 0x03555d098e,
    0x8aaa9d0af1, 0x02aadd0c70, 0x015a9d0dd3, 0x5b555d0f35, 0x01555d10b5, 0x02aadd1217,
    0x2d5a9d137a, 0x01aa9d14fa, 0xad555d165c, 0x01555d17dc, 0x02ad5d193e, 0x6daa9d1aa1,
    0x02aa9d1c21, 0x01555d1d83, 0x3aad5d1ee5, 0x02d55d2065, 0xceaa9d21c8, 0x02aa9d2348,
    0x01569d24aa, 0x9ad55d260c, 0x01555d278c, 0x02aadd28ee, 0x5d569d2a51, 0x016a9d2bd1,
    0x01555d2d33, 0x2aaadd2e95, 0x02ab5d3015, 0xbd6a9d3178, 0x02aa9d32f8, 0x01555d345a,
    0x7aab5d35bc, 0x02b55d373c, 0x02aa9d389f, 0x3d555d3a01, 0x01559d3b81, 0xcab55d3ce3,
    0x03555d3e63, 0x02aa9d3fc6, 0x9d559d4128, 0x015a9d42a8, 0x03555d440a, 0x5aaa9d456d,
    0x02aadd46ec, 0x015a9d484f, 0x1b555d49b1, 0x01555d4b31, 0xaaaadd4c93, 0x02ad5d4e13,
    0x01aa9d4f76, 0x7d555d50d8, 0x01555d5258, 0x02ad5d53ba, 0x4daa9d551d, 0x02aa9d569d,
    0xcd555d57ff, 0x01569d597f, 0x02d55d5ae1, 0x8eaa9d5c44, 0x02aa9d5dc4, 0x01569d5f26,
    0x5ad55d6088, 0x03555d6208, 0x02aa9d636b, 0x2d569d64cd, 0x016a9d664d, 0xab555d67af,
    0x01555d692f, 0x02ab5d6a91, 0x6d6a9d6bf4, 0x01aa9d6d74, 0x01555d6ed6, 0x4aab5d7038,
    0x02b55d71b8, 0xcdaa9d731b, 0x02aa9d749b, 0x01559d75fd, 0x8ab55d775f, 0x02d55d78df,
    0x02aa9d7a42, 0x5d559d7ba4, 0x015a9d7d24, 0x03555d7e86, 0x2aaa9d7fe9, 0x02aadd8168,
    0xbd5a9d82cb, 0x01aa9d844b, 0x01555d85ad, 0x7aaadd870f, 0x02ad5d888f, 0x01aa9d89f2,
    0x3d555d8b54, 0x01555d8cd4, 0xcaad5d8e36, 0x02d55d8fb6, 0x02aa9d9119, 0x9d555d927b,
    0x01569d93fb, 0x02d55d955d, 0x5eaa9d96c0, 0x02aa9d9840, 0x01569d99a2, 0x1ad55d9b04,
    0x03555d9c84, 0xaaaa9d9de7, 0x02ab5d9f66, 0x016a9da0c9, 0x7b555da22b, 0x01555da3ab,
    0x02ab5da50d, 0x3d6a9da670, 0x01aa9da7f0, 0xbd555da952, 0x01559daad2, 0x02b55dac34,
    0x8daa9dad97, 0x02aa9daf17, 0x01559db079, 0x5ab55db1db, 0x02d55db35b, 0x02aa9db4be,
    0x2d559db620, 0x015a9db7a0, 0xaad55db902, 0x01555dba82, 0x02aaddbbe4, 0x7d5a9dbd47,
    0x016a9dbec7, 0x01555dc029, 0x4aaaddc18b, 0x02ad5dc30b, 0xcd6a9dc46e, 0x02aa9dc5ee,
    0x01555dc750, 0x8aad5dc8b2, 0x02b55dca32, 0x02aa9dcb95, 0x5d555dccf7, 0x01569dce77,
    0x02b55dcfd9, 0x2eaa9dd13c, 0x02aa9dd2bc, 0xbd569dd41e, 0x016a9dd59e, 0x03555dd700,
    0x7aaa9dd863, 0x02ab5dd9e2, 0x016a9ddb45, 0x3b555ddca7, 0x01555dde27, 0xcaab5ddf89,
    0x02b55de109, 0x01aa9de26c, 0x9d555de3ce, 0x01559de54e, 0x02b55de6b0, 0x5daa9de813,
    0x02aa9de993, 0x01559deaf5, 0x1ab55dec57, 0x02d55dedd7, 0xaaaa9def3a, 0x02aaddf0b9,
    0x015a9df21c, 0x7ad55df37e, 0x01555df4fe, 0x02aaddf660, 0x3d5a9df7c3, 0x016a9df943,
    0xbd555dfaa5, 0x01555dfc25, 0x02ad5dfd87, 0x9d6a9dfeea, 0x02aa9e006a, 0x01555e01cc,
    0x6aad5e032e, 0x02b55e04ae, 0x02aa9e0611, 0x2d555e0773, 0x01569e08f3, 0xaab55e0a55,
    0x03555e0bd5, 0x02aa9e0d38, 0x7d569e0e9a, 0x015a9e101a, 0x03555e117c, 0x4aaa9e12df,
    0x02ab5e145e, 0xcd5a9e15c1, 0x01aa9e1741, 0x01555e18a3, 0x8aab5e1a05, 0x02ad5e1b85,
    0x01aa9e1ce8, 0x5e555e1e4a, 0x01559e1fca, 0x02ad5e212c, 0x2daa9e228f, 0x01aa9e240f,
    0xcb669e2571, 0x036a5e26f1, 0x03649e2854, 0x7f495e29b6, 0x03499e2b36, 0x02559e2c98,
    0x4cad5e2dfa, 0x02b59e2f7a, 0x01b51e30dd, 0x1b6a5e323f, 0x03b25e33bf, 0x8ba49e3522,
    0x01a4de36a1, 0x014ade3803, 0x6a55de3965, 0x0256de3ae5, 0x02d69e3c48, 0x2db51e3dab,
    0x01d51e3f2b, 0xbdd25e408d, 0x02d25e420d, 0x02a4de436f, 0x7d4ade44d1, 0x014b5e4651,
    0x026b5e47b3, 0x4ada9e4916, 0x036a9e4a96, 0x02e91e4bf9, 0x1ed25e4d5b, 0x03325e4edb,
    0x9ea55e503d, 0x02a59e51bd, 0x014d5e531f, 0x6aab5e5481, 0x02b55e5601, 0x036c9e5764,
    0x3b689e58c7, 0x03a95e5a46, 0xbb529e5ba9, 0x0152de5d28, 0x02a5de5e8a, 0x7d559e5fed,
    0x01569e616d, 0x02b55e62cf, 0x3db49e6432, 0x01d49e65b2, 0x03a95e6714, 0x1d929e6877,
    0x0192de69f6, 0x9aa6de6b58, 0x02ab5e6cd8, 0x015a9e6e3b, 0x5ad65e6f9d, 0x02ea5e711d,
    0x02d49e7280, 0x3ec95e73e2, 0x02c95e7562, 0xae92de76c4, 0x02955e7844, 0x02ab5e79a6,
    0x8d5a9e7b09, 0x016d1e7c89, 0x036a5e7deb, 0x4f649e7f4e, 0x01549e80ce, 0xcb49de822f,
    0x0349de83af, 0x02959e8512, 0xacad9e8674, 0x02b59e87f4, 0x01b51e8957, 0x6baa5e8ab9,
    0x03d25e8c39, 0x03a49e8d9c, 0x3b499e8efe, 0x034ade907d, 0xbe569e91e0, 0x025a9e9360,
    0x02b69e94c2, 0x8db51e9625, 0x02e49e97a5, 0x01c35e9907, 0x5fa2de9a69, 0x03a49e9bea,
    0x014a9e9d4c, 0x1a96de9ead, 0x025adea02d, 0x9b5a9ea190, 0x02ea9ea310, 0x03651ea473,
    0x5f515ea5d5, 0x03529ea755, 0x02a55ea8b7, 0x3d2adeaa19, 0x014b9eab99, 0xb96cdeacfb,
    0x02b55eae7b, 0x03b29eafde, 0x7f691eb141, 0x03a91eb2c1, 0x03529eb423, 0x5f255eb585,
    0x02a59eb705, 0x01559eb867, 0x1ab55eb9c9, 0x02b65ebb49, 0xadb49ebcac, 0x01d49ebe2c,
    0x03c95ebf8e, 0x6f929ec0f1, 0x01529ec271, 0x0326dec3d2, 0x2d569ec535, 0x00da9ec6b5,
    0xcada5ec817, 0x02ea5ec997, 0x02d49ecafa, 0x7ec95ecc5c, 0x03495ecddc, 0x01935ecf3e,
    0x4cab5ed0a0, 0x02ab5ed220, 0x016a9ed383, 0x1ad95ed4e5, 0x036a5ed665, 0x9f645ed7c8,
    0x03649ed948, 0x03499edaaa, 0x7a955edc0c, 0x0295dedd8b, 0x02b59edeee, 0x3d6c5ee051,
    0x01b51ee1d1, 0xcba65ee333, 0x03b25ee4b3, 0x03a45ee616, 0x7b499ee778, 0x034adee8f7,
    0x02969eea5a, 0x5cb69eebbc, 0x02da9eed3c, 0x01b51eee9f, 0x1bb25ef001, 0x01d25ef181,
    0x9da4def2e3, 0x01a4def463, 0x014adef5c5, 0x7a56def727, 0x016b5ef8a7, 0x02da9efa0a,
    0x3dd51efb6d, 0x02e91efced, 0xced25efe4f, 0x03525effcf, 0x02a55f0131, 0x8d4b5f0293,
    0x014d9f0413, 0x03ad5f0575, 0x4b6a1f06d9, 0x03749f0858, 0x03691f09bb, 0x2f525f0b1d,
    0x03529f0c9d, 0xada55f0dff, 0x02a59f0f7f, 0x012d5f10e1, 0x69ab5f1243, 0x01b55f13c3,
    0x036a5f1526, 0x3f689f1689, 0x03a89f1809, 0xcb519f196b, 0x034adf1aea, 0x02959f1c4d,
    0x8d559f1daf, 0x03569f1f2f, 0x03b51f2092, 0x4db21f21f5, 0x01d45f2374, 0x01a8df24d6,
    0x2d52df2638, 0x0152df27b8, 0xaaa6df291a, 0x02ab5f2a9a, 0x015a9f2bfd, 0x7ad55f2d5f,
    0x02e95f2edf, 0x02d49f3042, 0x3ea55f31a4, 0x02c55f3324, 0xbd52df3486, 0x01555f3606,
    0x02ad5f3768, 0x996a9f38cb, 0x0374df3a4a, 0x03691f3bae, 0x5f529f3d10, 0x03649f3e90,
    0x03455f3ff2, 0x1e535f4154, 0x01559f42d4, 0xaaad5f4436, 0x02b55f45b6, 0x01b51f4719,
    0x6ba95f487b, 0x03b15f49fb, 0x03a29f4b5e, 0x3b459f4cc0, 0x032adf4e3f, 0xca569f4fa2,
    0x015adf5121, 0x02da9f5284, 0x8dd51f53e7, 0x01d49f5567, 0x01d15f56c9, 0x5da2df582b,
    0x02a4df59ab, 0x012adf5b0d, 0x2a56df5c6f, 0x016b5f5def, 0xaada9f5f52, 0x036a9f60d2,
    0x02e89f6235, 0x6ed15f6397, 0x03515f6517, 0x02a55f6679, 0x4d4b5f67db, 0x014d9f695b,
    0xc9ad5f6abd, 0x01b55f6c3d, 0x03729f6da0, 0x8f689f6f03, 0x03a89f7083, 0x03529f71e5,
    0x5aa59f7347, 0x02a5df74c6, 0x01559f7629, 0x1aad5f778b, 0x02b55f790b, 0xb9b49f7a6e,
    0x00d4df7bed, 0x01a9df7d4f, 0x7d52df7eb2, 0x0152df8032, 0x02a6df8194, 0x3e569f82f7,
    0x015a9f8477, 0xcad95f85d9, 0x02ea5f8759, 0x02d49f88bc, 0x7ec95f8a1e, 0x02c95f8b9e,
    0x01935f8d00, 0x5aab5f8e62, 0x02ab5f8fe2, 0x016a9f9145, 0x1aea5f92a7, 0x036a5f9427,
    0x9f649f958a, 0x03649f970a, 0x03495f986c, 0x7e955f99ce, 0x02559f9b4e, 0x02ad5f9cb0,
    0x3d6d1f9e13, 0x01b51f9f93, 0xcbaa5fa0f5, 0x01d25fa275, 0x03a4dfa3d7, 0x8b499fa53a,
    0x034adfa6b9, 0x02569fa81c, 0x5ab59fa97e, 0x02da9faafe, 0x01d51fac61, 0x2bb25fadc3,
    0x01d25faf43, 0xada4dfb0a5, 0x02c55fb225, 0x014adfb387, 0x7a96dfb4e9, 0x016b5fb669,
    0x02da9fb7cc, 0x3ed51fb92f, 0x02e91fbaaf, 0xced25fbc11, 0x03529fbd91, 0x02a55fbef3,
    0x8d4b5fc055, 0x01559fc1d5, 0x02ad5fc337, 0x5b6a9fc49a, 0x03749fc61a, 0x03691fc77d,
    0x2f525fc8df, 0x03529fca5f, 0xaaa59fcbc1, 0x02aadfcd40, 0x01559fcea3, 0x7ab55fd005,
    0x02ba5fd185, 0x01b49fd2e8, 0x3ba95fd44a, 0x01a95fd5ca, 0xcb92dfd72c, 0x0192dfd8ac,
    0x02aadfda0e, 0x9d569fdb71, 0x015a9fdcf1, 0x02da5fde53, 0x5dd49fdfb6, 0x02d49fe136,
    0x02c95fe298, 0x2d92dfe3fa, 0x01935fe57a, 0xaaab5fe6dc, 0x02ad5fe85c, 0x016b1fe9bf,
    0x6aea5feb21, 0x036a5feca1, 0x03649fee04, 0x4ec95fef66, 0x03495ff0e6, 0xce955ff248,
    0x02559ff3c8, 0x02ad5ff52a, 0x9d6d1ff68d, 0x01b51ff80d, 0x03aa5ff96f, 0x5f649ffad2,
    0x03a49ffc52, 0x03499ffdb4, 0x2e959fff16, 0x0256a00096, 0xaab5a001f8, 0x02daa00378,
    0x01d52004db, 0x6bb260063d, 0x01d26007bd, 0x01a4e0091f, 0x4d49e00a81, 0x014ae00c01,
    0xca9ae00d63, 0x016b600ee3, 0x035aa01046, 0x9ed52011a9, 0x02e9201329, 0x02d260148b,
    0x5ea56015ed, 0x02a560176d, 0x014b6018cf, 0x1aab601a31, 0x02ad601bb1, 0xae6aa01d14,
    0x0374a01e94, 0x0369201ff7, 0x7f52a02159, 0x0352a022d9, 0x02a5a0243b, 0x3d4da0259d,
    0x0155a0271d, 0xcab560287f, 0x02b56029ff, 0x01b4a02b62, 0x8ba9602cc4, 0x01a9602e44,
    0x0152e02fa6, 0x5b25e03108, 0x02aae03288, 0x0156a033eb, 0x1ab560354d, 0x02da6036cd,
    0xaed4a03830, 0x02d4a039b0, 0x02c9603b12, 0x7d92e03c74, 0x0193603df4, 0x02ab603f56,
    0x4d5aa040b9, 0x016b204239, 0xcaea60439b, 0x036a60451b, 0x0364a0467e, 0x8f496047e0,
    0x0349a04960, 0x0293604ac2, 0x6cab604c24, 0x02b5a04da4, 0x016d204f07, 0x2b6a605069,
    0x03b26051e9, 0xaba4a0534c, 0x03a4e054cb, 0x0349a0562e, 0x7a95a05790, 0x0296e0590f,
    0x00d6a05a72, 0x39b5605bd4, 0x01d5605d54, 0x01d2605eb7, 0x1ba4e06019, 0x01a4e06199,
    0x9d4ae062fb, 0x014ae0647b, 0x029ae065dd, 0x5d56a06740, 0x035aa068c0, 0x02d9206a23,
    0x2dd2606b85, 0x02d2606d05, 0xaea5606e67, 0x02a5606fe7, 0x014b607149, 0x7aab6072ab,
    0x02ad60742b, 0x036aa0758e, 0x3ee92076f1, 0x03a9207871, 0x0352a079d3, 0x1ea5607b35,
    0x02a5a07cb5, 0x9d55a07e17, 0x0156a07f97, 0x02b56080f9, 0x5d74a0825c, 0x01b4a083dc,
    0x03a960853e, 0x2b92a086a1, 0x0192e08820, 0xab25e08982, 0x02aae08b02, 0x0156a08c65,
    0x7ad5608dc7, 0x02da608f47, 0x01d4a090aa, 0x4dc960920c, 0x02c960938c, 0xcd92e094ee,
    0x029560966e, 0x00ab6097d0, 0x995ae09932, 0x016d609ab2, 0x02ea609c15, 0x5ed4a09d78,
    0x0364a09ef8, 0x034960a05a, 0x2e9360a1bc, 0x0295a0a33c, 0xad2b60a49e, 0x00b5a0a61e,
    0x01ad60a780, 0x6b6a60a8e3, 0x03b260aa63, 0x03a4a0abc6, 0x4f49a0ad28, 0x034aa0aea8,
    0xca95a0b00a, 0x0296e0b189, 0x00d6a0b2ec, 0x9ab560b44e, 0x01d560b5ce, 0x01d260b731,
    0x5ba4e0b893, 0x01a4e0ba13, 0x014ae0bb75, 0x2a96e0bcd7, 0x02aae0be57, 0xae5aa0bfba,
    0x036aa0c13a, 0x02d920c29d, 0x7dd260c3ff, 0x035260c57f, 0x02a560c6e1, 0x4d4ae0c843,
    0x015360c9c3, 0xcaab60cb25, 0x02ad60cca5, 0x016aa0ce08, 0x9b6960cf6a, 0x03a960d0ea,
    0x0352a0d24d, 0x6ea560d3af, 0x02a5a0d52f, 0x0155a0d691, 0x2aad60d7f3, 0x02b560d973,
    0xaeb4a0dad6, 0x01b4a0dc56, 0x03a960ddb8, 0x7b92a0df1b, 0x01a2e0e09a, 0x0329e0e1fc,
    0x4d55a0e35f, 0x0156a0e4df, 0xcab660e641, 0x02da60e7c1, 0x01d4a0e924, 0x8dc960ea86,
    0x02d160ec06, 0x0192e0ed68, 0x6d2ae0eeca, 0x012b60f04a, 0x015ae0f1ac, 0x2adaa0f30f,
    0x02ea60f48f, 0xaee4a0f5f2, 0x0368a0f772, 0x035160f8d4, 0x7e9360fa36, 0x0295a0fbb6,
    0x012b60fd18, 0x496b60fe7a, 0x01b560fffa, 0x036a61015d, 0x1f64a102c0, 0x03a8a10440,
    0x9f49a105a2, 0x034aa10722, 0x0295a10884, 0x6d2da109e6, 0x00d6a10b66, 0x01b5610cc8,
    0x2bb2610e2b, 0x01d2610fab, 0xaea4e1110d, 0x01a561128d, 0x014ae113ef, 0x7a96e11551,
    0x02aae116d1, 0x015aa11834, 0x3ad5611996, 0x02e9611b16, 0x01d2611c79, 0x1ea5611ddb,
    0x02a5611f5b, 0x9d4ae120bd, 0x015361223d, 0x02ab61239f, 0x6d5aa12502, 0x016ca12682,
    0x03696127e4, 0x2f52a12947, 0x0352a12ac7, 0xaf45612c29, 0x0329a12da9, 0x0155a12f0b,
    0x7acd61306d, 0x02b56131ed, 0x01b4a13350, 0x4ba96134b2, 0x03a9613632, 0xcba2a13795,
    0x01a2e13914, 0x032ae13a76, 0x9e55a13bd9, 0x015aa13d59, 0x02d6a13ebb, 0x5db4a1401e,
    0x01d4a1419e, 0x01d1614300, 0x3da2e14462, 0x01a2e145e2, 0xae2ae14744, 0x012b6148c4,
    0x015ae14a26, 0x7adaa14b89, 0x02eaa14d09, 0x02e4a14e6c, 0x4ed1614fce, 0x035161514e,
    0x02a56152b0, 0x1d2b615412, 0x012d615592, 0x9a6b6156f4, 0x01b5615874, 0x036aa159d7,
    0x5f68a15b3a, 0x03a8a15cba, 0x0351a15e1c, 0x3ea5615f7e, 0x0295a160fe, 0xae55a16260,
    0x0156a163e0, 0x01b5616542, 0x7bb2a166a5, 0x01d4616825, 0x03a8e16987, 0x4b52a16aea,
    0x0152e16c69, 0xcaa6e16dcb, 0x02ab616f4b, 0x015aa170ae, 0xaad5617210, 0x02e9617390,
    0x01d46174f3, 0x6ea9617655, 0x02c56177d5, 0x0152e17937, 0x2aaae17a99, 0x02ab617c19,
    0xae5aa17d7c, 0x016ca17efc, 0x036a61805e, 0x7f52a181c1, 0x0362a18341, 0x03456184a3,
    0x4e53618605, 0x0155a18785, 0xcaad6188e7, 0x02b5618a67, 0x01b5218bca, 0x8eaa618d2c,
    0x03b1618eac, 0x03a2a1900f, 0x6b49a19171, 0x032ae192f0, 0x0255a19453, 0x3ab5a195b5,
    0x02daa19735, 0xae35219898, 0x01d5619a17, 0x01d1619b7a, 0x7da2e19cdc, 0x01a4e19e5c,
    0x014ae19fbe, 0x5a56e1a120, 0x016b61a2a0, 0x02daa1a403, 0x1ed521a566, 0x02e8a1a6e6,
    0x9ed161a848, 0x035161a9c8, 0x02a561ab2a, 0x6d4b61ac8c, 0x012d61ae0c, 0x01ad61af6e,
    0x2b6aa1b0d1, 0x036aa1b251, 0xae68a1b3b4, 0x03a961b533, 0x0352a1b696, 0x7ec561b7f8,
    0x02a5a1b978, 0x0155a1bada, 0x4aad61bc3c, 0x01b561bdbc, 0x01b4a1bf1f, 0x2ba8e1c081,
    0x03a961c201, 0x9b52a1c364, 0x0152e1c4e3, 0x02a6e1c645, 0x6d56a1c7a8, 0x015aa1c928,
    0x02d961ca8a, 0x2dd4a1cbed, 0x01d4a1cd6d, 0xaec961cecf, 0x02c961d04f, 0x0192e1d1b1,
    0x7acae1d313, 0x02ab61d493, 0x016aa1d5f6, 0x4ada61d758, 0x036a61d8d8, 0x0354a1da3b,
    0x1ec961db9d, 0x034961dd1d, 0x9e9361de7f, 0x0255a1dfff, 0x02ad61e161, 0x6d6d21e2c4,
    0x01b521e444, 0x03aa61e5a6, 0x3f64a1e709, 0x03a4a1e889, 0xae49a1e9eb, 0x034b61eb6a,
    0x0255a1eccd, 0x7ad5a1ee2f, 0x02daa1efaf, 0x01b521f112, 0x4bb261f274, 0x01d261f3f4,
    0x01a4e1f556, 0x1d4ae1f6b8, 0x014ae1f838, 0x9a56e1f99a, 0x016b61fb1a, 0x02daa1fc7d,
    0x5ed521fde0, 0x02e921ff60, 0x02d16200c2, 0x3ea4e20224, 0x02a56203a4, 0xae4b620506,
    0x0155a20686, 0x02ad6207e8, 0x7dcaa2094b, 0x0372a20acb, 0x0369220c2e, 0x4f52620d90,
    0x0352a20f10, 0x02a5a21072, 0x1d4b6211d4, 0x0155a21354, 0xaaad6214b6, 0x02b5621636,
    0x01b4a21799, 0x6ba96218fb, 0x03a9621a7b, 0x0352a21bde, 0x3aa5a21d40, 0x02aae21ebf,
    0xae56a22022, 0x015aa221a2, 0x02da622304, 0x7dd4a22467, 0x01d4a225e7, 0x02c9622749,
    0x5d92e228ab, 0x0193622a2b, 0x02aae22b8d, 0x1d5aa22cf0, 0x016aa22e70, 0xaaea622fd2,
    0x036a623152, 0x0364a232b5, 0x6ec9623417, 0x0349623597, 0x02956236f9, 0x3cab62385b,
    0x02ad6239db, 0xbd6d223b3e, 0x01b5223cbe, 0x03aa623e20, 0x7ba4a23f83, 0x03a4e24102,
    0x0349a24265, 0x5e95a243c7, 0x0256a24547, 0x02b5a246a9, 0x1db522480c, 0x01d522498c,
    0x9eb2624aee, 0x01d2624c6e, 0x01a4e24dd0, 0x6d4ae24f32, 0x014ae250b2, 0x0296e25214,
    0x2ad6a25377, 0x02daa254f7, 0xae5522565a, 0x02e96257d9, 0x02d262593c, 0x8ea4e25a9e,
    0x02a5625c1e, 0x014b625d80, 0x4aab625ee2, 0x02ad626062, 0x036aa261c5, 0x1ee9226328,
    0x03692264a8, 0x9f5262660a, 0x0352a2678a, 0x02a5a268ec, 0x6d4ba26a4e, 0x0155a26bce,
    0x02b5626d30, 0x2d6aa26e93, 0x01b4a27013, 0xaea9627175, 0x03a96272f5, 0x0192a27458,
    0x8b25e275b9, 0x02aae27739, 0x014ea2789c, 0x5ab56279fe, 0x02da627b7e, 0x01d4a27ce1,
    0x1da9627e43, 0x02c9627fc3, 0x9e92e28125, 0x01936282a5, 0x02ab628407, 0x7d5aa2856a,
    0x016b2286ea, 0x02ea62884c, 0x3ed4a289af, 0x0364a28b2f, 0xbec9628c91, 0x0349628e11,
    0x0295628f73, 0x8cab6290d5, 0x02ad629255, 0x016d2293b8, 0x4b6a62951a, 0x03b262969a,
    0x03a4a297fd, 0x2f4962995f, 0x0349a29adf, 0xaa95a29c41, 0x0296e29dc0, 0x00b5a29f23,
    0x6db562a085, 0x01d522a206, 0x03b262a368, 0x3ba4a2a4cb, 0x01a4e2a64a, 0xbd4ae2a7ac,
    0x014ae2a92c, 0x029ae2aa8e, 0x8d56a2abf1, 0x035aa2ad71, 0x02d922aed4, 0x4dd262b036,
    0x02d262b1b6, 0x02a562b318, 0x2d4ae2b47a, 0x014b62b5fa, 0xaaab62b75c, 0x02ad62b8dc,
    0x036aa2ba3f, 0x6ee922bba2, 0x036922bd22, 0x0352a2be84, 0x3ea562bfe6, 0x02a5a2c166,
    0xbd55a2c2c8, 0x0155a2c448, 0x02b562c5aa, 0x9d6ca2c70d, 0x01b4a2c88d, 0x03a962c9ef,
    0x5b52a2cb52, 0x0192e2ccd1, 0x0325e2ce33, 0x1d55a2cf96, 0x0156a2d116, 0xaab562d278,
    0x02da62d3f8, 0x01d4a2d55b, 0x6da962d6bd, 0x02c962d83d, 0x0192e2d99f, 0x3b2ae2db01,
    0x00ab62dc81, 0xbd5ae2dde3, 0x016d22df64, 0x02ea62e0c6, 0x7ed4a2e229, 0x0364a2e3a9,
    0x034962e50b, 0x5e9362e66d, 0x029562e7ed, 0x012b62e94f, 0x196b62eab1, 0x016d62ec31,
    0xae6a62ed94, 0x03b262ef14, 0x03a4a2f077, 0x6f4962f1d9, 0x034aa2f359, 0x0295a2f4bb,
    0x3d2da2f61d, 0x00d6a2f79d, 0xcdb562f8ff, 0x01d522fa80, 0x03d262fbe2, 0x8ba4a2fd45,
    0x01a4e2fec4, 0x014ae30026, 0x5a95e30188, 0x02aae30308, 0x0156a3046b, 0x1eb56305cd,
    0x02d923074e, 0xbdd26308b0, 0x02d2630a30, 0x02a5630b92, 0x7d4ae30cf4, 0x014b630e74,
    0x02ab630fd6, 0x3d5aa31139, 0x016aa312b9, 0x02e963141b, 0x1ed263157e, 0x0352a316fe,
    0x8ea5631860, 0x02a5a319e0, 0x0155a31b42, 0x5aad631ca4, 0x02b5631e24, 0x0174a31f87,
    0x1b696320e9, 0x03a9632269, 0x9b92a323cc, 0x0192e3254b, 0x0329e326ad, 0x7d55a32810,
    0x0156a32990, 0x02b5632af2, 0x3db4a32c55, 0x01d4a32dd5, 0xbdc9632f37, 0x02d16330b7,
    0x0192e33219, 0x8d2ae3337b, 0x012b6334fb, 0x015ae3365d, 0x4adaa337c0, 0x02ea633940,
    0x02d4a33aa3, 0x2ed1633c05, 0x0351633d85, 0xae93633ee7, 0x0295634067, 0x012b6341c9,
    0x696b63432b, 0x01ad6344ab, 0x036a63460e, 0x3f64a34771, 0x03a8a348f1, 0xcf49a34a53,
    0x034aa34bd3, 0x0295a34d35, 0x8d2da34e97, 0x00d6a35017, 0x01b5635179, 0x4bb26352dc,
    0x01d263545c, 0x03a4e355be, 0x2b4aa35721, 0x014ae358a0, 0xaa95e35a02, 0x02aae35b82,
    0x015aa35ce5, 0x7ed5635e47, 0x02d9235fc8, 0x01d263612a, 0x3da4e3628c, 0x02a563640c,
    0xbd4ae3656e, 0x01536366ee, 0x02ab636850, 0x9d5aa369b3, 0x016ca36b33, 0x02e9636c95,
    0x5ed2a36df8, 0x0352a36f78, 0x02c56370da, 0x1d5363723c, 0x0155a373bc, 0xaaad63751e,
    0x02b563769e, 0x01b4a37801, 0x6b69637963, 0x03a9637ae3, 0x03a2a37c46, 0x4b45a37da8,
    0x0329e37f27, 0xce55a3808a, 0x0156a3820a, 0x02b663836c, 0x8db4a384cf, 0x01d4a3864f,
    0x01d16387b1, 0x5da2e38913, 0x01a2e38a93, 0x012ae38bf5, 0x2a56e38d57, 0x015ae38ed7,
    0xaadaa3903a, 0x02eaa391ba, 0x02e4a3931d, 0x6ed163947f, 0x03516395ff, 0x02a5639761,
    0x4d2b6398c3, 0x012b639a43, 0xc96b639ba5, 0x01b5639d25, 0x036aa39e88, 0x8f68a39feb,
    0x03a8a3a16b, 0x0351a3a2cd, 0x5ea563a42f, 0x0295a3a5af, 0x0156a3a711, 0x3ab563a873,
    0x02da63a9f3, 0x01d4a3ab56, 0x1ba963acb8, 0x02c963ae38, 0x8d92e3af9a, 0x029363b11a,
    0x012ae3b27c, 0x5956e3b3de, 0x016b63b55e, 0x02da63b6c1, 0x2ed4a3b824, 0x0364a3b9a4,
    0x9f4963bb06, 0x034963bc86, 0x029563bde8, 0x8d2b63bf4a, 0x00ada3c0ca, 0x016d63c22c,
    0x4b6a63c38f, 0x03b263c50f, 0x03a4a3c672, 0x1f4963c7d4, 0x0349a3c954, 0x8a95a3cab6,
    0x0295e3cc35, 0x00b5a3cd98, 0x5db563cefa, 0x01b523d07b, 0x03b263d1dd, 0x2ba4a3d340,
    0x01a4e3d4bf, 0xad4ae3d621, 0x014ae3d7a1, 0x0296e3d903, 0x7d56a3da66, 0x015aa3dbe6,
    0x02d963dd48, 0x4dd263deab, 0x02d263e02b, 0x02a563e18d, 0x1d4ae3e2ef, 0x014b63e46f,
    0x9aab63e5d1, 0x02ad63e751, 0x016aa3e8b4, 0x5ae963ea16, 0x036963eb96, 0x0352a3ecf9,
    0x3ea563ee5b, 0x0325a3efdb, 0xbd4ba3f13d, 0x0155a3f2bd, 0x02ad63f41f, 0x7d6ca3f582,
    0x01b4a3f702, 0x03a963f864, 0x4f92a3f9c7, 0x0192a3fb47, 0xcb25e3fca8, 0x032ae3fe28,
    0x0156a3ff8b, 0xaab5a400ed, 0x02da64026d, 0x01d4a403d0, 0x6da9640532, 0x02c96406b2,
    0x0192e40814, 0x2d26e40976, 0x012ae40af6, 0xb95ae40c58, 0x016b640dd8, 0x02ea640f3b,
    0x7ed4a4109e, 0x0364a4121e, 0x0349641380, 0x4e92e414e2, 0x0295641662, 0xcd2b6417c4,
    0x00ada41944, 0x016d641aa6, 0x9b6aa41c09, 0x03b2641d89, 0x03a4a41eec, 0x6f4964204e,
    0x034aa421ce, 0x0295a42330, 0x3d2da42492, 0x0155a42612, 0xc9b5642774, 0x01d56428f4,
    0x01d2642a57, 0x7ba4e42bb9, 0x01a4e42d39, 0x014ae42e9b, 0x5a95e42ffd, 0x02aae4317d,
    0x0156a432e0, 0x1ab5643442, 0x02d96435c2, 0xadd2a43725, 0x02d26438a5, 0x02a5643a07,
    0x6d4ae43b69, 0x014b643ce9, 0x02ab643e4b, 0x2d5aa43fae, 0x016aa4412e, 0xbae9644290,
    0x0369644410, 0x0352a44573, 0x7f456446d5, 0x0325a44855, 0x0253a449b7, 0x4aab644b19,
    0x02b5644c99, 0x0174a44dfc, 0x1b69644f5e, 0x03a96450de, 0x8ba2a45241, 0x01a2e453c0,
    0x0325e45522, 0x6a55a45685, 0x0156e45804, 0x02b6a45967, 0x2db5245aca, 0x01d4a45c4a,
    0xbdd1645dac, 0x02d1645f2c, 0x02a2e4608e, 0x8d2ae461f0, 0x012b646370, 0x025ae464d2,
    0x4adaa46635, 0x02eaa467b5, 0x02d4a46918, 0x1ed1646a7a, 0x0351646bfa, 0x8ea4e46d5c,
    0x0295646edc, 0x012b64703e, 0x6a6b6471a0, 0x01ad647320, 0x036aa47483, 0x3f652475e6,
    0x03a8a47766, 0xbf516478c8, 0x0352a47a48, 0x02a5a47baa, 0x7d4da47d0c, 0x0156a47e8c,
    0x02b5647fee, 0x4db2a48151, 0x01d4a482d1, 0x03a8e48433, 0x1b52a48596, 0x0152e48715,
    0x9aa5e48877, 0x02aae489f7, 0x0156a48b5a, 0x5ab5648cbc, 0x02d9648e3c, 0x01d4a48f9f,
    0x4da9649101, 0x02a9649281, 0x0152e493e3, 0x2aa6e49545, 0x02ab6496c5, 0x7d5aa49828,
    0x016ca499a8, 0x02ea649b0a, 0x5ed4a49c6d, 0x0364a49ded, 0x0349649f4f, 0x3e9364a0b1,
    0x0255a4a231, 0x8aab64a393, 0x02b5a4a513, 0x017524a676, 0x5b6a64a7d8, 0x03b164a958,
    0x03a2a4aabb, 0x4b49a4ac1d, 0x0349e4ad9c, 0xaa55a4aeff, 0x0256e4b07e, 0x00b6a4b1e1,
].freeze

Class Method Summary collapse

Class Method Details

.covers_jd?(jd) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/wareki/calendar.rb', line 21

def covers_jd?(jd)
  jd.between?(JD_MIN, JD_MAX)
end

.covers_year?(year) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/wareki/calendar.rb', line 17

def covers_year?(year)
  year.between?(YEAR_MIN, YEAR_MAX)
end

.find_date_ary(jd) ⇒ Object

jd を [西暦年, 月, 日, 閏月フラグ] に変換する。範囲外は nil



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/wareki/calendar.rb', line 65

def find_date_ary(jd)
  covers_jd?(jd) or return nil
  i = PACKED.bsearch_index { |packed| (packed & 0x3fffff) > jd }
  if i.nil?
    i = PACKED.size - 1
  else
    i -= 1
  end
  packed = PACKED[i]
  month_start = packed & 0x3fffff
  months = 12 + ((packed >> 35) & 1)
  lp = packed >> 36
  idx = 0
  while idx < months - 1
    next_start = month_start + 29 + ((packed >> (22 + idx)) & 1)
    break if jd < next_start

    month_start = next_start
    idx += 1
  end
  month = idx + 1
  month -= 1 if lp != 0 && lp < month
  [YEAR_MIN + i, month, jd - month_start + 1, lp != 0 && lp == idx]
end

.last_day_of_month(year, month, is_leap) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/wareki/calendar.rb', line 41

def last_day_of_month(year, month, is_leap)
  covers_year?(year) or return nil
  packed = PACKED[year - YEAR_MIN]
  idx = month_index(year, month, is_leap)
  months = 12 + ((packed >> 35) & 1)
  return LAST_MONTH_DAYS if year == YEAR_MAX && idx == months - 1

  29 + ((packed >> (22 + idx)) & 1)
end

.leap_month(year) ⇒ Object

閏月の月番号。閏月のない年・範囲外の年は nil



26
27
28
29
30
# File 'lib/wareki/calendar.rb', line 26

def leap_month(year)
  covers_year?(year) or return nil
  lp = PACKED[year - YEAR_MIN] >> 36
  lp == 0 ? nil : lp
end

.month_index(year, month, is_leap) ⇒ Object

月番号 (1始まり) を月配列添字 (閏月込み・0始まり) に変換する。 year がテーブル範囲内であることは呼び出し側が保証すること。



34
35
36
37
38
39
# File 'lib/wareki/calendar.rb', line 34

def month_index(year, month, is_leap)
  lp = leap_month(year)
  idx = month - 1
  is_leap || (lp && month > lp) and idx += 1
  idx
end

.to_jd(year, month, day, is_leap) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/wareki/calendar.rb', line 51

def to_jd(year, month, day, is_leap)
  covers_year?(year) or return nil
  packed = PACKED[year - YEAR_MIN]
  idx = month_index(year, month, is_leap)
  jd = packed & 0x3fffff
  i = 0
  while i < idx
    jd += 29 + ((packed >> (22 + i)) & 1)
    i += 1
  end
  jd + day - 1
end