when_exe 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.ja.txt +25 -25
- data/LICENSE.txt +31 -31
- data/bin/locales.rb +2 -1
- data/bin/when.rb.config +1 -1
- data/lib/when_exe.rb +70 -48
- data/lib/when_exe/basictypes.rb +99 -65
- data/lib/when_exe/calendartypes.rb +40 -178
- data/lib/when_exe/coordinates.rb +156 -62
- data/lib/when_exe/core/compatibility.rb +10 -0
- data/lib/when_exe/core/extension.rb +40 -0
- data/lib/when_exe/ephemeris.rb +112 -50
- data/lib/when_exe/icalendar.rb +125 -91
- data/lib/when_exe/inspect.rb +100 -48
- data/lib/when_exe/locales/ar.rb +48 -48
- data/lib/when_exe/locales/bg.rb +1 -1
- data/lib/when_exe/locales/bs.rb +4 -2
- data/lib/when_exe/locales/ca.rb +1 -1
- data/lib/when_exe/locales/en_CA.rb +3 -4
- data/lib/when_exe/locales/en_IE.rb +88 -0
- data/lib/when_exe/locales/en_US.rb +87 -0
- data/lib/when_exe/locales/es_CR.rb +84 -0
- data/lib/when_exe/locales/es_EC.rb +85 -0
- data/lib/when_exe/locales/es_PA.rb +85 -0
- data/lib/when_exe/locales/fr.rb +39 -39
- data/lib/when_exe/locales/hu.rb +15 -14
- data/lib/when_exe/locales/it.rb +1 -1
- data/lib/when_exe/locales/ja.rb +2 -2
- data/lib/when_exe/locales/locales.rb +7 -0
- data/lib/when_exe/locales/lt.rb +21 -19
- data/lib/when_exe/locales/ms.rb +84 -0
- data/lib/when_exe/locales/nl.rb +2 -2
- data/lib/when_exe/locales/ru.rb +1 -1
- data/lib/when_exe/locales/uk.rb +1 -1
- data/lib/when_exe/locales/ur.rb +84 -0
- data/lib/when_exe/mini_application.rb +44 -43
- data/lib/when_exe/parts/enumerator.rb +3 -3
- data/lib/when_exe/parts/geometric_complex.rb +6 -1
- data/lib/when_exe/parts/locale.rb +49 -18
- data/lib/when_exe/parts/method_cash.rb +61 -0
- data/lib/when_exe/parts/resource.rb +221 -106
- data/lib/when_exe/parts/timezone.rb +70 -33
- data/lib/when_exe/region/bahai.rb +2 -2
- data/lib/when_exe/region/balinese.rb +40 -43
- data/lib/when_exe/region/chinese.rb +93 -33
- data/lib/when_exe/region/chinese_calendar.rb +117 -1
- data/lib/when_exe/region/chinese_epoch.rb +65 -10
- data/lib/when_exe/region/christian.rb +97 -2
- data/lib/when_exe/region/ephemeric_notes.rb +353 -0
- data/lib/when_exe/region/french.rb +1 -1
- data/lib/when_exe/region/geologicalage.rb +171 -171
- data/lib/when_exe/region/indian.rb +18 -14
- data/lib/when_exe/region/iranian.rb +1 -1
- data/lib/when_exe/region/japanese.rb +49 -12
- data/lib/when_exe/region/japanese_notes.rb +838 -507
- data/lib/when_exe/region/japanese_residues.rb +724 -662
- data/lib/when_exe/region/javanese.rb +7 -7
- data/lib/when_exe/region/mayan.rb +19 -17
- data/lib/when_exe/region/nihon_shoki.rb +3 -3
- data/lib/when_exe/region/residue.rb +29 -28
- data/lib/when_exe/region/shire.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +87 -5
- data/lib/when_exe/region/world.rb +1 -1
- data/lib/when_exe/timestandard.rb +85 -7
- data/lib/when_exe/tmobjects.rb +32 -4
- data/lib/when_exe/tmposition.rb +104 -55
- data/lib/when_exe/tmreference.rb +157 -60
- data/lib/when_exe/version.rb +2 -2
- data/test/examples/JapanHolidays.ics +3 -3
- data/test/examples/JapanHolidaysRFC6350.ics +499 -0
- data/test/examples/Residue.m17n +3 -2
- data/test/examples/Spatial.m17n +3 -3
- data/test/examples/USA-DST.ics +27 -27
- data/test/examples/today.rb +1 -1
- data/test/test.rb +4 -2
- data/test/test/basictypes.rb +40 -15
- data/test/test/coordinates.rb +9 -4
- data/test/test/icalendar.rb +24 -14
- data/test/test/inspect.rb +5 -3
- data/test/test/parts.rb +11 -2
- data/test/test/region/chinese.rb +4 -4
- data/test/test/region/civil.rb +124 -0
- data/test/test/region/geologicalage.rb +5 -2
- data/test/test/region/indian.rb +2 -0
- data/test/test/region/japanese.rb +156 -1
- data/test/test/region/jewish.rb +3 -3
- data/test/test/region/m17n.rb +9 -9
- data/test/test/region/mayan.rb +122 -5
- data/test/test/region/residue.rb +1 -1
- data/test/test/tmobjects.rb +27 -64
- data/test/test/tmposition.rb +48 -1
- data/test/test/tmreference.rb +66 -4
- data/when_exe.gemspec +1 -1
- metadata +15 -6
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
=begin
|
3
|
-
Copyright (C) 2011-
|
3
|
+
Copyright (C) 2011-2014 Takashi SUGA
|
4
4
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
@@ -517,6 +517,122 @@ module When
|
|
517
517
|
}
|
518
518
|
]
|
519
519
|
|
520
|
+
#
|
521
|
+
# 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表(一部修正あり)
|
522
|
+
#
|
523
|
+
# 隋・唐:: 大業暦 618
|
524
|
+
# 唐:: 戊寅暦 619 - 664
|
525
|
+
# 唐・周:: 麟徳暦 665 - 728 総法 1340(小余の分母)
|
526
|
+
# 唐:: 大衍暦 729 - 761 通法 3040( 〃 )
|
527
|
+
# 唐:: 五紀暦 762 - 783 通法 1340( 〃 )
|
528
|
+
# 唐:: 正元暦 784 - 806
|
529
|
+
# 唐:: 観象暦 807 - 821
|
530
|
+
# 唐:: 宣明暦 822 - 892 統法 8400( 〃 )
|
531
|
+
# 唐~後梁:: 崇玄暦 893 - 907
|
532
|
+
Chinese0618 = [PatternTableBasedLuniSolar, {
|
533
|
+
'origin_of_MSC'=>618, 'origin_of_LSC'=>1946814,
|
534
|
+
'indices'=> _IndicesM1,
|
535
|
+
'rule_table'=> %w( aBcDeFgHiJkL ABbcDefGhIJKl AbCdeFgHiJkL
|
536
|
+
ABcDefGhIjJkL AbCDefGhIjKl AbCDeFgHiJkL aBcDeFGgHiJkL aBcdEFgHIjKl
|
537
|
+
AbCdeFgHIJkL aBcCdeFgHIjKL aBcdEfgHIjKL AbCdeFghIJkLL AbCdeFgHiJkL
|
538
|
+
AbCdEfGhIjKl AbCDeFgHhIjKl AbCdEFgHiJkL aBcdEfGHIjKl AbCddEfGHIjKl
|
539
|
+
AbCdeFghIJKL aBcDefgHIjKL AbBcDefgHiJKL aBCdeFghIjKL aBCdEfGhIjJkL
|
540
|
+
aBcDEfGhIjKl AbcDEfGHiJkL aBcdEfFGhIJkL aBcdEfGhIJKl aBcDeFGhIjKl
|
541
|
+
AbCcDeFgHiJKl AbCdEfGhIjKl AbCDeFgHiJkLl AbCdEFgHiJkL aBcDeFgHiJKl
|
542
|
+
|
543
|
+
AbCdEfGhIiJkL aBCdEfGhIjKl AbCdEFgHiJkL aBcDeEfGhIJkL aBcDeFgHiJkL
|
544
|
+
aBCdEfGhIjKl AaBcDEfGhIjKl AbCdEfGhIJkL aBcDeFgHiJjKl ABcDeFgHiJkL
|
545
|
+
aBcDEfGhIjKl AbCdEfGgHIjKl AbCdEfGhIjKl ABcDeFgHiJkL aBcCDeFgHiJkL
|
546
|
+
AbCdEfgHiJkL AbCDeFghIjKlL aBCdEfGhIjKl AbCdEFgHiJKl aBcDeFgHIiJKl
|
547
|
+
aBcdEfGHiJKL abCdeFgHiJKL aBcDeeFgHiJKL aBcDefGhIjKL aBCdEfgHiJkL
|
548
|
+
aBCcDeFgHiJkL AbcDEfGhIjKL AbcdEfGHiJkKl AbcDeFGhIJkL aBcdEfGhIJKl
|
549
|
+
AbCdeFgGhIJKl AbCdeFgHiJKl ABcDefGhIjKL aBcDEefGhIjKl AbCDeFgHiJkL
|
550
|
+
aBcDeFGhIjKl AaBcDeFgHIjKl AbcDeFgHIJkL aBcdEfGhIIJkL aBcdEfgHIjKL
|
551
|
+
AbCdeFghIJKL aBcDeeFghIJKL abCdEfGhIjkL AbCDeFgHiJkL aBbCdEFgHiJkL
|
552
|
+
abCdEFgHIjKl AbcDeFgHIJJkl AbcDeFgHiJKL aBcdEfgHIJkL AbCdeFggHiJKL
|
553
|
+
|
554
|
+
aBCdeFghIjKL aBCdEfGhIjkL AbCdDEfGhIjkL aBCdEfGHiJkL abCdEfGHiJKl
|
555
|
+
AabCdEfGHiJKl AbcDefGHiJKL aBcDefGhIiJKL aBcDefGhIjKL aBCdEfgHiJkL
|
556
|
+
aBCDeFfgHiJkL aBCdEfGhIjKl AbCdEfGHiJkL AbbcDeFGHiJkL aBcdEfGHiJKl
|
557
|
+
AbCdeFgHiJKLl AbcDefGhIJkL ABcdEfgHiJkL ABcDeFggHiJkL ABcDeFghIJkL
|
558
|
+
aBcDEfGhIjKl AbCdEeFGhIjKl AbcDeFGhIJkL aBcdEfGhIJkLL AbcdEfGhIJkL
|
559
|
+
AbCdeFghIJkL ABcDefGhiIJkL AbCDefGhiJkL aBCdEfGHijKl AbCdEFfGhIjKl
|
560
|
+
AbCdEfGHiJKl aBcdEfGHIjKL abCcdEfGHiJKl AbCdeFgHiJKL aBcDefGhIjKKl
|
561
|
+
ABCdeFghIjKL aBCdEfGhiJkL aBCdEFgHhiJkL aBcDEfGHiJkl AbCdEfGHiJKl
|
562
|
+
AbcDdEfGHiJKl AbcDefGHiJKL aBcdEfgHiJKL aBBcdEfgHiJKl ABcDeFghIjKl
|
563
|
+
ABCdEfGhiJjKl ABcDeFGhiJkL aBcDEfGhIjKl AbCdEfFGhIJkL abCdeFGhIJkL
|
564
|
+
|
565
|
+
AbcDefGhIJKl ABccDefGhIJkL AbCdEfgHiJkL ABcDeFghIjKkL AbCDeFghIjKl
|
566
|
+
AbCDeFGhiJkL aBcDeFGhHiJkL aBcDeFgHIjKL abCdeFgHIJkL AbcDdeFgHIjKL
|
567
|
+
aBcdeFGhIJkL AbCdEFghiJkL AaBCdEfgHiJkL AbCdEfGhIjKl AbCDeFgHiJjKl
|
568
|
+
AbCdEfGHiJkL aBcdEfGHIjKl AbCdeFfGHiJKl AbCdefGHiJKL aBcDefgHiJKL
|
569
|
+
AbCcDefgHiJKL aBCdeFgHijKL aBCdEfGhIjKkl ABcDeFGhIjKl aBcDEfGhIJkL
|
570
|
+
abCdEfGHhIJkL abCdEfGhIJKl AbCdefGhIJKl ABcDeefGHiJKL aBcdEfgHiJKl
|
571
|
+
ABcDeFgHijKL aAbCDeFgHijKl AbCDeFGhIjKl AbcDeFGhIJjKl aBcDeFgHIJkL
|
572
|
+
aBcdeFgHIJKl AbCdeeFgHIjKL AbCdefGhIJkL AbCdEfGhiJkL AbCDdEfgHiJkL
|
573
|
+
AbCdEFgHijKl AbCDeFgHIjKll AbCdEfGHIjKl aBcDeFgHIjKL aBcdEfgHHiJKL
|
574
|
+
aBcdeFgHiJKL aBCdefGhIjKL AbCdEefGhIjKL aBCdEfgHiJkL aBCdEfGhIjKl
|
575
|
+
|
576
|
+
AaBcDEfGhIjKl AbCdEfGHiJKl aBCdefGHiJJKl aBcdEfGhIJKl AbCdeFgHiJKL
|
577
|
+
aBcDeFfgHiJKl ABcDefGhIjKl ABcDEfGhiJkL aBCcDeFgHiJkL aBcDEfGhIJkl
|
578
|
+
AbCdEfGHiJKlL abcDeFGhIJKl AbcDefGhIJKl ABcdeFgHhIJKl AbCdEfgHiJkL
|
579
|
+
ABcDeFghIjKl ABcDEefGhIjKl AbCDeFgHiJkL aBcDeFGhIjKl AaBcDeFgHIjKL
|
580
|
+
abcDeFgHIJkL AbcDefGhIJjKL aBcDefGhIjKL AbCdEfghIJkL ABcDeFggHiJkL
|
581
|
+
AbCDefGhIjKl AbCDeFgHiJkL aBcCdEFgHiJkL aBcdEFgHIjKl AbCdeFgHIjKLl
|
582
|
+
AbCdeFgHiJKL aBcDefGhIjKL AbCdEfggHiJKL aBCdeFgHijKL aBCdEfGhIjKl
|
583
|
+
AbCdEeFGhIjKl AbCdEfGHiJkL aBcdEfGHiJKl AaBcdEfGhIJKl AbCdeFgHiJKL
|
584
|
+
aBcDefgHiIJKl ABcDefgHiJKl ABcDeFgHijKL aBCdEfGgHijKL aBcDeFGhIjKl
|
585
|
+
aBcDEfGhIJkL aBccDeFGhIJkL aBcdEfGhIJKl AbCdefGhIJKkL AbCdefGhIJkL
|
586
|
+
|
587
|
+
ABcDefgHiJkL ABcDeFgHhiJkL AbCDeFgHijKl AbCDeFgHIjKl aBcDdEFgHIjKl
|
588
|
+
AbcDeFgHIjKL aBcdEfgHIJkL AbBcdeFgHIjKL AbCdefGhIjKL AbCdEfgHiJjKL
|
589
|
+
aBCdEfGhiJkL AbCdEFgHijKl AbCdEFfGhIJkl AbCdEfGHiJKl AbcDeFgHIjKL
|
590
|
+
aBccdEfGHiJKL aBcdeFgHiJKL aBCdefGhIjKLl ABcDeFghIjKL aBCdEfGhiJkL
|
591
|
+
aBCdEfGhHiJkL aBcDEfGhIjKl AbCdEfGHiJKl aBcDdeFGhIJkL AbcdEfGhIJKl
|
592
|
+
ABcdeFgHiJKl ABbCdeFgHiJkL ABcDeFghIjKl ABcDEfgHiJjKl AbCDeFgHiJkL
|
593
|
+
aBcDeFGhIjKl AbCdEfGgHIjKl AbCdeFgHIJkL aBcDefGhIJkL AbCcDefGhIjKL
|
594
|
+
AbCdEfghIJkL ABcDefGhIjKkL AbCdEfGhIjKl AbCDeFgHiJkL aBcDeFgHIiJkL
|
595
|
+
aBcdEFghIJKl AbCdeFgHIjKL aBcDeeFgHiJKL aBcDefgHIjKL AbCdEfghIjKL
|
596
|
+
AaBCdeFgHijKL aBCdEfGhIjKl AbCdEFgHiJjKl AbCdEfGHiJkL abCdEFgHIjKL
|
597
|
+
|
598
|
+
abCdeFfGHiJKl AbcDefGHiJKL aBcDefgHiJKL aBCdDefgHiJKl ABcDeFgHijKL
|
599
|
+
aBcDEfGhIjkLl ABcDeFGhIjKl)
|
600
|
+
}
|
601
|
+
]
|
602
|
+
|
603
|
+
#
|
604
|
+
# 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表(一部修正あり)
|
605
|
+
#
|
606
|
+
# 唐・周:: 麟徳暦 688 - 700 (歳首 建子月)
|
607
|
+
Chinese0618B = [PatternTableBasedLuniSolar, {
|
608
|
+
'origin_of_MSC'=>688, 'origin_of_LSC'=>1972387, 'border'=>'0*11-01',
|
609
|
+
'indices'=> [
|
610
|
+
Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
|
611
|
+
:trunk=>When.Resource('_m:ChineseTerms::MonthA::*')}),
|
612
|
+
Coordinates::DefaultDayIndex
|
613
|
+
],
|
614
|
+
'rule_table'=> %w( AbcDeFgHIJkL aBcdEfGhIIJkL aBcdEfgHIjKL
|
615
|
+
AbCdeFghIJKL aBcDeeFghIJKL abCdEfGhIjkL AbCDeFgHiJkL aBbCdEFgHiJkL
|
616
|
+
abCdEFgHIjKl AbcDeFgHIJJkl AbcDeFgHiJKL aBcdEfgHIJkL AbCdeFggHiJKL)
|
617
|
+
}
|
618
|
+
]
|
619
|
+
|
620
|
+
#
|
621
|
+
# 『唐・日本における進朔に関する研究』(2013-10版)を使用する場合の朔閏表(一部修正あり)
|
622
|
+
#
|
623
|
+
# 唐:: 大衍暦 760-761 (歳首 建子月)
|
624
|
+
# 唐:: 五紀暦 762 (歳首 建子月)
|
625
|
+
Chinese0618C = [PatternTableBasedLuniSolar, {
|
626
|
+
'origin_of_MSC'=>760, 'origin_of_LSC'=>1998670, 'border'=>'0*11-01',
|
627
|
+
'indices'=> [
|
628
|
+
Coordinates::Index.new({:branch=>{1=>When.Resource('_m:CalendarTerms::閏')},
|
629
|
+
:trunk=>When.Resource('_m:ChineseTerms::MonthB::*')}),
|
630
|
+
Coordinates::DefaultDayIndex
|
631
|
+
],
|
632
|
+
'rule_table'=> %w(AbcDdeFgHIjKL aBcdeFGhIJkL AbCdEFghiJkL)
|
633
|
+
}
|
634
|
+
]
|
635
|
+
|
520
636
|
# 後晋:: 調元暦 939 - 943
|
521
637
|
# 後晋:: 調元暦? 944 - 946
|
522
638
|
# 遼:: 調元暦 947 - 994
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
=begin
|
3
|
-
Copyright (C) 2011-
|
3
|
+
Copyright (C) 2011-2014 Takashi SUGA
|
4
4
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
@@ -14,10 +14,10 @@ module When
|
|
14
14
|
#
|
15
15
|
# 中国の年号
|
16
16
|
#
|
17
|
-
Chinese = [self, [
|
17
|
+
Chinese = [{'V'=>{'0618'=>{'A'=>'0618', 'B'=>'0618B', 'C'=>'0618C'}}}, self, [
|
18
18
|
"namespace:[ja=http://ja.wikipedia.org/wiki/, en=http://en.wikipedia.org/wiki/]",
|
19
19
|
"locale:[=ja:, en=en:]",
|
20
|
-
|
20
|
+
'area:[中国#{?V=A}=ja:%%<元号>#%.<中国>,China#{?V=A}=en:Chinese_era_name]',
|
21
21
|
[self,
|
22
22
|
"period:[秦]",
|
23
23
|
["[始皇帝]25*", "@F" , "name=[始皇帝];-221*10-01^Chinese_221"],# 歳首は10月
|
@@ -679,7 +679,7 @@ module When
|
|
679
679
|
],
|
680
680
|
[self,
|
681
681
|
"period:[唐]",
|
682
|
-
["[武徳]1" , "@F" ,
|
682
|
+
["[武徳]1" , "@F" , 'name=[高祖];618-05-20^Chinese#{A:0523}'], # 甲子 武徳2年から戊寅暦を使用
|
683
683
|
["[貞観]1" , "@A" , "name=[太宗];627-01-01"], # 乙酉
|
684
684
|
["[永徽]1" , "@A" , "name=[高宗];650-01-01"], # 辛丑
|
685
685
|
["[顕慶]1" , "" , " 656-01-07"], # 壬申
|
@@ -700,10 +700,10 @@ module When
|
|
700
700
|
["[光宅]1" , "" , " 684-09-06"], # 甲寅
|
701
701
|
["[垂拱]1" , "" , "name=[武太后];685-01-01"], # 丁未
|
702
702
|
["[永昌]1" , "" , " 689-01-01"], # 乙卯
|
703
|
-
["[載初]1*11.01", "" ,
|
703
|
+
["[載初]1*11.01", "" , ' 690*11-01^Chinese#{B:0689}', "690-09-09"], # 庚辰 本年から11月を歳首とする
|
704
704
|
[self,
|
705
705
|
"period:[周]",
|
706
|
-
["[天授]1*" , "@F" ,
|
706
|
+
["[天授]1*" , "@F" , 'name=[武則天];690-09-09^Chinese#{B:0689}'], # 壬午
|
707
707
|
["[如意]1*" , "" , " 692-04-01"], # 丙申
|
708
708
|
["[長寿]1*" , "" , " 692-09-09"], # 庚子
|
709
709
|
["[延載]1*" , "" , " 694-05-11"], # 甲午
|
@@ -714,12 +714,12 @@ module When
|
|
714
714
|
["[神功]1*" , "" , " 697-08-29"], # 壬辰 コンサイス世界年表では1年ずれる
|
715
715
|
["[聖暦]1*11.01", "" , " 698*11-01"], # 甲子
|
716
716
|
["[久視]1*" , "" , " 700-05-05", # 癸丑
|
717
|
-
|
717
|
+
' 700-10-01^Chinese#{A:0523}',""],# 本年で歳首を元にもどす
|
718
718
|
["[大足]1" , "" , " 701-01-03"], # 丁丑
|
719
719
|
["[長安]1" , "" , " 701-10-22"], # 辛酉
|
720
720
|
["[神龍]1" , "" , " 705-01-01", "705-02-04"] # 壬午
|
721
721
|
],
|
722
|
-
["[神龍]1.02.04", "" ,
|
722
|
+
["[神龍]1.02.04", "" , 'name=[中宗];705-02-04^Chinese#{A:0523}'], # 甲寅
|
723
723
|
["[景龍]1" , "" , " 707-09-05"], # 庚子
|
724
724
|
["[唐隆]1" , "@A" , "name=[少帝];710-06-04"], # 甲申
|
725
725
|
["[景雲]1" , "" , "name=[睿宗];710-07-20"], # 己巳
|
@@ -731,8 +731,8 @@ module When
|
|
731
731
|
["[至徳]1" , "@A" , "name=[粛宗];756-07-12"], # 甲子
|
732
732
|
["[乾元]1" , "" , " 758-02-05"], # 丁未
|
733
733
|
["[上元]1" , "" , " 760-04=19"], # 己卯
|
734
|
-
["[粛宗]1" , "" , "name=[粛宗];761-09-21",
|
735
|
-
["[宝応]1" , "@A" ,
|
734
|
+
["[粛宗]1" , "" , "name=[粛宗];761-09-21", '762*11^Chinese#{C:0761}', ""], # 壬寅
|
735
|
+
["[宝応]1" , "@A" , 'name=[代宗];762-04-15^Chinese#{A:0523}'], # 甲子 本年から五紀暦を使用
|
736
736
|
["[広徳]1" , "" , " 763-07-11"], # 壬子
|
737
737
|
["[永泰]1" , "" , " 765-01-01"], # 癸巳
|
738
738
|
["[大暦]1" , "" , " 766-11-12"], # 甲子
|
@@ -1242,5 +1242,60 @@ module When
|
|
1242
1242
|
"@F", "name=;1912-01-01^Gregorian"]
|
1243
1243
|
]
|
1244
1244
|
]]
|
1245
|
+
|
1246
|
+
# Chinese Luni-Solar Calendar Series for ChineseNote
|
1247
|
+
ChineseLuniSolarSeries = [self, [
|
1248
|
+
'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
|
1249
|
+
'locale:[=en:, ja=ja:, alias]',
|
1250
|
+
'area:[ChineseLuniSolarSeries=, 中国の暦月=]',
|
1251
|
+
['[太初暦]1.01.01', '@CR', '1.01.01^Chinese::太初暦', '85-01-01'], # 西暦が正になるところから開始(実際は-103.01.01)
|
1252
|
+
['[四分暦]85.01.01', '@CR', '85.01.01^Chinese::四分暦', '265-01-01'],
|
1253
|
+
['[乾象暦]222.01.01', '@CR', '222.01.01^Chinese::乾象暦', '281-01-01'],
|
1254
|
+
['[景初暦]237.01.01', '@CR', '237.01.01^Chinese::景初暦', '452-01-01'],
|
1255
|
+
['[元嘉暦]445.01.01', '@CR', '445.01.01^Chinese::元嘉暦', '510-01-01'],
|
1256
|
+
['[大明暦]510.01.01', '@CR', '510.01.01^Chinese::大明暦', '590-01-01'],
|
1257
|
+
['[三紀暦]384.01.01', '@CR', '384.01.01^Chinese::三紀暦', '418-01-01'],
|
1258
|
+
['[玄始暦]412.01.01', '@CR', '412.01.01^Chinese::玄始暦', '440-01-01'],
|
1259
|
+
['[玄始暦]452.01.01', '@CR', '452.01.01^Chinese::玄始暦', '523-01-01'],
|
1260
|
+
['[正光暦]523.01.01', '@CR', '523.01.01^Chinese::正光暦', '566-01-01'],
|
1261
|
+
['[興和暦]540.01.01', '@CR', '540.01.01^Chinese::興和暦', '551-01-01'],
|
1262
|
+
['[天保暦]551.01.01', '@CR', '551.01.01^Chinese::天保暦', '578-01-01'],
|
1263
|
+
['[天和暦]566.01.01', '@CR', '566.01.01^Chinese::天和暦', '579-01-01'],
|
1264
|
+
['[大象暦]579.01.01', '@CR', '579.01.01^Chinese::大象暦', '584-01-01'],
|
1265
|
+
['[開皇暦]584.01.01', '@CR', '584.01.01^Chinese::開皇暦', '597-01-01'],
|
1266
|
+
['[大業暦]597.01.01', '@CR', '597.01.01^Chinese::大業暦', '619-01-01'],
|
1267
|
+
['[麟徳暦]665.01.01', '@CR', '665.01.01^Chinese::麟徳暦', '729-01-01'],
|
1268
|
+
['[大衍暦]729.01.01', '@CR', '729.01.01^Chinese::大衍暦', '762-01-01'],
|
1269
|
+
['[五紀暦]762.01.01', '@CR', '762.01.01^Chinese::五紀暦', '784-01-01'],
|
1270
|
+
['[宣明暦]822.01.01', '@CR', '822.01.01^Chinese::宣明暦', '893-01-01']
|
1271
|
+
]]
|
1272
|
+
|
1273
|
+
# Chinese Solar Calendar Series for ChineseNote
|
1274
|
+
ChineseSolarSeries = [self, [
|
1275
|
+
'namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]',
|
1276
|
+
'locale:[=en:, ja=ja:, alias]',
|
1277
|
+
'area:[ChineseSolarSeries=, 中国の節月=]',
|
1278
|
+
['[太初暦]1.01.01', '@CR', '1-01-01^Chinese::太初暦(節月)', '85-01-06'], # 西暦が正になるところから開始(実際は-103.01.15)
|
1279
|
+
['[四分暦]85.01.07', '@CR', '85-01-07^Chinese::四分暦(節月)', '264-12-28'],
|
1280
|
+
['[乾象暦]221.12.23', '@CR', '221-12-23^Chinese::乾象暦(節月)', '280-12-31'],
|
1281
|
+
['[景初暦]237.01.07', '@CR', '237-01-07^Chinese::景初暦(節月)', '451-12-31'],
|
1282
|
+
['[元嘉暦]444.12.22', '@CR', '444-12-22^Chinese::元嘉暦(節月)', '509-12-24'],
|
1283
|
+
['[大明暦]509.12.23', '@CR', '509-12-23^Chinese::大明暦(節月)', '590-01-08'],
|
1284
|
+
['[三紀暦]384.01.02', '@CR', '384-01-02^Chinese::三紀暦(節月)', '418-01-16'],
|
1285
|
+
['[玄始暦]411.12.26', '@CR', '411-12-26^Chinese::玄始暦(節月)', '440-01-15'],
|
1286
|
+
['[玄始暦]452.01.02', '@CR', '452-01-02^Chinese::玄始暦(節月)', '522-12-29'],
|
1287
|
+
['[正光暦]522.12.29', '@CR', '522-12-29^Chinese::正光暦(節月)', '566-01-05'],
|
1288
|
+
['[興和暦]539.12.22', '@CR', '539-12-22^Chinese::興和暦(節月)', '550-12-20'],
|
1289
|
+
['[天保暦]550.12.19', '@CR', '550-12-19^Chinese::天保暦(節月)', '577-12-21'],
|
1290
|
+
['[天和暦]566.01.05', '@CR', '566-01-05^Chinese::天和暦(節月)', '579-01-11'],
|
1291
|
+
['[大象暦]579.01.11', '@CR', '579-01-11^Chinese::大象暦(節月)', '584-01-15'],
|
1292
|
+
['[開皇暦]584.01.16', '@CR', '584-01-16^Chinese::開皇暦(節月)', '596-12-23'],
|
1293
|
+
['[大業暦]596.12.22', '@CR', '596-12-22^Chinese::大業暦(節月)', '618-12-19'],
|
1294
|
+
['[麟徳暦]664.01.01', '@CR', '664-01-01^Chinese::麟徳暦(節月)', '729-01-03'], # 年の始めに遡って開始(実際は12.21)
|
1295
|
+
['[大衍暦]729.01.03', '@CR', '729-01-03^Chinese::大衍暦(節月)', '761-12-29'],
|
1296
|
+
['[五紀暦]761.12.29', '@CR', '761-12-29^Chinese::五紀暦(節月)', '783-12-26'],
|
1297
|
+
['[正元暦]783.12.26', '@CR', '783-12-26^Chinese::正元暦(節月)', '807-01-11'],
|
1298
|
+
['[宣明暦]821.01.01', '@CR', '821-01-01^Chinese::宣明暦(節月)', '892-12-22'] # 年の始めに遡って開始(実際は12.27)
|
1299
|
+
]]
|
1245
1300
|
end
|
1246
1301
|
end
|
@@ -367,6 +367,7 @@ module When
|
|
367
367
|
# @past = グレゴリオ暦への改暦前の暦法
|
368
368
|
# @reform_date = 改暦日付(月日は 1 オリジンで指定し、0 オリジンに直して保持)
|
369
369
|
# @reform_jdn = 改暦日付のユリウス通日
|
370
|
+
# @reform = reform_date か reform_jdn を内容で判別し、どちらかに反映する
|
370
371
|
# @the_easter = グレゴリオ暦の復活祭計算の適用を始める年
|
371
372
|
# @the_length = 通常と異なる日付となる年月の情報({[年,月]=>[スキップした日数, スキップし始める日, 月の日数]})
|
372
373
|
#
|
@@ -379,6 +380,13 @@ module When
|
|
379
380
|
@indices ||= @past.indices
|
380
381
|
|
381
382
|
# 改暦日付 (0 オリジン)
|
383
|
+
@reform = When::Coordinates::Pair._en_pair_date_time(@reform) if @reform.kind_of?(String)
|
384
|
+
case @reform.length
|
385
|
+
when 0 ;
|
386
|
+
when 1 ; @reform_jdn = @reform[0]
|
387
|
+
else ; @reform_date = @reform
|
388
|
+
end if @reform.kind_of?(Array)
|
389
|
+
|
382
390
|
if @reform_date
|
383
391
|
@reform_date = When::Coordinates::Pair._en_pair_date_time(@reform_date) if @reform_date.kind_of?(String)
|
384
392
|
@reform_date = @reform_date.map {|c| c.to_i}
|
@@ -479,11 +487,70 @@ module When
|
|
479
487
|
# 日の暦注 ----------------------------
|
480
488
|
[When::BasicTypes::M17n,
|
481
489
|
"names:[day]",
|
482
|
-
[When::BasicTypes::M17n, "names:[Easter,
|
483
|
-
[When::BasicTypes::M17n, "names:[Christmas,
|
490
|
+
[When::BasicTypes::M17n, "names:[Easter, 復活祭]" ],
|
491
|
+
[When::BasicTypes::M17n, "names:[Christmas, クリスマス]"],
|
492
|
+
[When::BasicTypes::M17n, "names:[Fixed_feast=, 固定祝日=]" ],
|
493
|
+
[When::BasicTypes::M17n, "names:[Moveable_feast, 移動祝日]" ]
|
484
494
|
]
|
485
495
|
]]
|
486
496
|
|
497
|
+
# 固定祝日
|
498
|
+
Fixed_feasts = {
|
499
|
+
[ 1, 6] => "Epiphany",
|
500
|
+
[ 3, 1] => "St.David's Day",
|
501
|
+
[ 3, 17] => "St.Patrick's Day",
|
502
|
+
[ 3, 25] => "Annunciation-Lady Day",
|
503
|
+
[ 4, 23] => "St.George's Day",
|
504
|
+
[ 6, 24] => "Midsummer Day",
|
505
|
+
[ 9, 14] => "Holy Cross Day",
|
506
|
+
[ 9, 29] => "Michaelmas Day",
|
507
|
+
[11, 30] => "St.Andrew's Day",
|
508
|
+
[12, 13] => "St.Lucia's Day",
|
509
|
+
[12, 21] => "St.Thomas's Day",
|
510
|
+
# [12, 25] => "Christmas Day"
|
511
|
+
}
|
512
|
+
|
513
|
+
# 移動祝日 (日付と曜日による)
|
514
|
+
moveable_feasts = {}
|
515
|
+
[[[ 9, 15, 2], "III Quatember"],
|
516
|
+
[[11, 27, 6], "Advent Sunday"],
|
517
|
+
[[12, 14, 2], "IV Quatember" ]].each do |pair|
|
518
|
+
date, name = pair
|
519
|
+
7.times do
|
520
|
+
moveable_feasts[date.dup] = name
|
521
|
+
date[1] += 1
|
522
|
+
if date[1] > 30
|
523
|
+
date[0] += 1
|
524
|
+
date[1] = 1
|
525
|
+
end
|
526
|
+
end
|
527
|
+
end
|
528
|
+
|
529
|
+
# 移動祝日
|
530
|
+
Moveable_feasts = {
|
531
|
+
# 復活祭からの日数による
|
532
|
+
-63 => "Septuagesima Sunday",
|
533
|
+
-56 => "Sexagesima Sunday",
|
534
|
+
-49 => "Quinquagesima Sunday",
|
535
|
+
-46 => "Ash Wednesday",
|
536
|
+
-42 => "Quadragesima Sunday",
|
537
|
+
-40 => "I Quatember",
|
538
|
+
-35 => "Reminizer Sunday",
|
539
|
+
-28 => "Oculi Sunday",
|
540
|
+
-21 => "Laetare Sunday",
|
541
|
+
-14 => "Judica Sunday",
|
542
|
+
-7 => "Palmarum",
|
543
|
+
-2 => "Good Friday",
|
544
|
+
# 0 => "Easter Day",
|
545
|
+
7 => "Low Sunday",
|
546
|
+
35 => "Rogation Sunday",
|
547
|
+
39 => "Ascension Day",
|
548
|
+
49 => "Whitsunday",
|
549
|
+
53 => "II Quatember",
|
550
|
+
56 => "Trinity Sunday",
|
551
|
+
60 => "Corpus Christi",
|
552
|
+
}.update(moveable_feasts)
|
553
|
+
|
487
554
|
# 週日補正フラグ
|
488
555
|
# @return [Integer]
|
489
556
|
attr_reader :w
|
@@ -572,6 +639,34 @@ module When
|
|
572
639
|
# @private
|
573
640
|
alias :easter_delta :_delta
|
574
641
|
|
642
|
+
# 固定祝日
|
643
|
+
#
|
644
|
+
# @param [When::TM::TemporalPosition] date
|
645
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
646
|
+
#
|
647
|
+
# @return [String] 祝日の名称
|
648
|
+
# @return [nil] 祝日に該当しない
|
649
|
+
#
|
650
|
+
def fixed_feast(date, frame=nil)
|
651
|
+
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Julian)
|
652
|
+
Fixed_feasts[date.cal_date[-2..-1]]
|
653
|
+
end
|
654
|
+
|
655
|
+
# 移動祝日
|
656
|
+
#
|
657
|
+
# @param [When::TM::TemporalPosition] date
|
658
|
+
# @param [When::TM::ReferenceSystem] frame 使用する暦法(デフォルトは When.Resource('_c:Gregorian'))
|
659
|
+
#
|
660
|
+
# @return [String] 祝日の名称
|
661
|
+
# @return [nil] 祝日に該当しない
|
662
|
+
#
|
663
|
+
def moveable_feast(date, frame=nil)
|
664
|
+
result = Moveable_feasts[date.to_i - easter(date, frame).to_i]
|
665
|
+
return result if result
|
666
|
+
date = When.Calendar(frame||'Gregorian') ^ date unless date.frame.kind_of?(When::CalendarTypes::Julian)
|
667
|
+
Moveable_feasts[date.cal_date[-2..-1] + [date.to_i % 7]]
|
668
|
+
end
|
669
|
+
|
575
670
|
private
|
576
671
|
|
577
672
|
# オブジェクトの正規化
|
@@ -0,0 +1,353 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2011-2014 Takashi SUGA
|
4
|
+
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
|
+
=end
|
7
|
+
|
8
|
+
#
|
9
|
+
# Ephemeris を用いる暦注
|
10
|
+
#
|
11
|
+
module When::CalendarTypes
|
12
|
+
|
13
|
+
class CalendarNote
|
14
|
+
#
|
15
|
+
# 太陽と月の位置によるイベント
|
16
|
+
#
|
17
|
+
class LuniSolarPositions < self
|
18
|
+
|
19
|
+
# 座標の分子
|
20
|
+
#
|
21
|
+
# @return [Numeric]
|
22
|
+
#
|
23
|
+
attr_reader :num
|
24
|
+
|
25
|
+
# 座標の分母
|
26
|
+
#
|
27
|
+
# @return [Numeric]
|
28
|
+
#
|
29
|
+
attr_reader :den
|
30
|
+
|
31
|
+
# 計算アルゴリズム
|
32
|
+
#
|
33
|
+
# @return [When::Ephemeris::Formula]
|
34
|
+
#
|
35
|
+
attr_reader :formula
|
36
|
+
|
37
|
+
# enumerator の周期
|
38
|
+
#
|
39
|
+
# @return [Numeric]
|
40
|
+
#
|
41
|
+
attr_reader :delta
|
42
|
+
|
43
|
+
# 没滅計算用の補正
|
44
|
+
#
|
45
|
+
# @return [Numeric]
|
46
|
+
#
|
47
|
+
attr_reader :margin
|
48
|
+
|
49
|
+
# イベントの日時
|
50
|
+
#
|
51
|
+
# @param [When::TM::TemporalPosition] date イベントを探す基準とする日時
|
52
|
+
# @param [Array<Numeric>] parameter 座標の分子と分母( num, den)
|
53
|
+
#
|
54
|
+
# num 座標の分子 (デフォルト @num)
|
55
|
+
#
|
56
|
+
# den 座標の分母 (デフォルト @den)
|
57
|
+
#
|
58
|
+
# @param [String] parameter 座標の分子と分母("#{ num }/#{ den }" の形式)
|
59
|
+
# @param [Integer] precision 取得したい時間位置の分解能(デフォルト date の分解能)
|
60
|
+
#
|
61
|
+
# @return [When::TM::CalDate] date またはその直後のイベントの日時
|
62
|
+
#
|
63
|
+
def term(date, parameter=nil, precision=date.precision)
|
64
|
+
precision = nil if precision == When::SYSTEM
|
65
|
+
num, den = parameter.kind_of?(String) ? parameter.split(/\//, 2) : parameter
|
66
|
+
num = (num || @num).to_f
|
67
|
+
den = (den || @den).to_f
|
68
|
+
date = date.floor(precision) if precision
|
69
|
+
options = date._attr
|
70
|
+
quot, mod = (@formula.time_to_cn(date)*30.0).divmod(den)
|
71
|
+
cycle = quot * den + num
|
72
|
+
cycle += den if mod > (num % den)
|
73
|
+
time = When::TM::JulianDate._d_to_t(@formula.cn_to_time(cycle/30.0))
|
74
|
+
time = date.time_standard.from_dynamical_time(time) if @formula.is_dynamical
|
75
|
+
date = date.frame.jul_trans(When::TM::JulianDate.universal_time(time), options)
|
76
|
+
precision ? date.floor(precision) : date
|
77
|
+
end
|
78
|
+
|
79
|
+
# 日付に対応する座標
|
80
|
+
#
|
81
|
+
# @param [When::TM::TemporalPosition] date 日付
|
82
|
+
# @param [Numeric] delta 周期の補正(土用の時刻の補正に使用,デフォルト 0)
|
83
|
+
#
|
84
|
+
# @return [Array<Integer>] Array< Integer, 0 or 1 or 2 >
|
85
|
+
#
|
86
|
+
# [Integer] 対応する座標
|
87
|
+
#
|
88
|
+
# [0 or 1 or 2] 座標の進み(0 なら 没, 2 なら滅)
|
89
|
+
#
|
90
|
+
def position(date, delta=0)
|
91
|
+
date = date.floor
|
92
|
+
p0, p1 = [date, date.succ].map {|d| (30.0 * @formula.time_to_cn(d) - @margin + delta).floor}
|
93
|
+
[p1 % @den, p1 - p0]
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# イベントの標準的な間隔を返す
|
98
|
+
#
|
99
|
+
# @param [String] parameter 座標の分子と分母("#{ num }/#{ den }" の形式)
|
100
|
+
#
|
101
|
+
# @return [When::TM::IntervalLength]
|
102
|
+
def term_delta(parameter=nil)
|
103
|
+
return @delta unless parameter
|
104
|
+
num, den = parameter.split(/\//, 2)
|
105
|
+
When::TM::IntervalLength.new([(den || @den).to_f-1,1].max, 'day')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# 二十四節気
|
111
|
+
#
|
112
|
+
class SolarTerms < LuniSolarPositions
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
# オブジェクトの正規化
|
117
|
+
# num - 太陽黄経/度の分子 (デフォルト 0 - 春分)
|
118
|
+
# den - 太陽黄経/度の分母 (デフォルト 360 - 1年)
|
119
|
+
# formula - 計算アルゴリズム(デフォルト '_ep:Formula?formula=12S')
|
120
|
+
# delta - enumerator の周期 (デフォルト (den/360)年)
|
121
|
+
# margin - 没滅計算用の補正 (デフォルト 1E-8)
|
122
|
+
def _normalize(args=[], options={})
|
123
|
+
num, den, formula, delta, margin = args
|
124
|
+
@num = (num || @num || 0).to_f
|
125
|
+
@den = (den || @den || 360).to_f
|
126
|
+
@formula = When.Resource(formula || @formula ||'Formula?formula=12S', '_ep:')
|
127
|
+
@delta = When.Duration(delta || @delta || When::TM::IntervalLength.new(@den/360, 'year'))
|
128
|
+
@margin = (margin || @margin || 1E-8).to_f
|
129
|
+
super
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# 月の位相
|
135
|
+
#
|
136
|
+
class LunarPhases < LuniSolarPositions
|
137
|
+
|
138
|
+
private
|
139
|
+
|
140
|
+
# オブジェクトの正規化
|
141
|
+
# num - 月の位相/12度の分子 (デフォルト 0 - 朔)
|
142
|
+
# den - 月の位相/12度の分母 (デフォルト 30 - 1月)
|
143
|
+
# formula - 計算アルゴリズム(デフォルト '_ep:Formula?formula=1L')
|
144
|
+
# delta - enumerator の周期 (デフォルト (den/30)月)
|
145
|
+
# margin - 没滅計算用の補正 (デフォルト 1E-8)
|
146
|
+
def _normalize(args=[], options={})
|
147
|
+
num, den, formula, delta, margin = args
|
148
|
+
@num = (num || @num || 0).to_f
|
149
|
+
@den = (den || @den || 30).to_f
|
150
|
+
@formula = When.Resource(formula || @formula ||'Formula?formula=1L', '_ep:')
|
151
|
+
@delta = When.Duration(delta || @delta || When::TM::IntervalLength.new(@den/30, 'month'))
|
152
|
+
@margin = (margin || @margin || 1E-8).to_f
|
153
|
+
super
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
#
|
158
|
+
# 天体暦の暦注
|
159
|
+
#
|
160
|
+
class EphemericNote < self
|
161
|
+
|
162
|
+
NoteObjects = [When::BasicTypes::M17n, [
|
163
|
+
"namespace:[en=http://en.wikipedia.org/wiki/, ja=http://ja.wikipedia.org/wiki/]",
|
164
|
+
"locale:[=en:, ja=ja:, alias=ja:]",
|
165
|
+
"names:[Ephemeric]",
|
166
|
+
|
167
|
+
# 年の暦注 ----------------------------
|
168
|
+
[When::BasicTypes::M17n,
|
169
|
+
"names:[year]"
|
170
|
+
],
|
171
|
+
|
172
|
+
# 月の暦注 ----------------------------
|
173
|
+
[When::BasicTypes::M17n,
|
174
|
+
"names:[month]",
|
175
|
+
[When::BasicTypes::M17n,
|
176
|
+
"names:[Month]"
|
177
|
+
]
|
178
|
+
],
|
179
|
+
|
180
|
+
# 日の暦注 ----------------------------
|
181
|
+
[When::BasicTypes::M17n,
|
182
|
+
"names:[day]",
|
183
|
+
"[Sunrise, 日の出 ]", # 日の出
|
184
|
+
"[Sunset, 日の入り ]", # 日の入り
|
185
|
+
[When::Coordinates::Residue,
|
186
|
+
"label:[Moon_Age=, 正午月齢=ja:%%<月齢>]",
|
187
|
+
"divisor:60",
|
188
|
+
"format:[%s(%4.1f)]"
|
189
|
+
],
|
190
|
+
"[Moonrise, 月の出 ]", # 月の出
|
191
|
+
"[Moonset=, 月の入り ]", # 月の入り
|
192
|
+
[When::BasicTypes::M17n,
|
193
|
+
"names:[Tide, 潮汐]", # 満潮干潮日時
|
194
|
+
"[High_Tide=en:Tide, 満潮=ja:%%<潮汐>]",
|
195
|
+
"[Low_Tide=en:Tide, 干潮=ja:%%<潮汐>]"
|
196
|
+
]
|
197
|
+
]
|
198
|
+
]]
|
199
|
+
|
200
|
+
#
|
201
|
+
# 日の出
|
202
|
+
#
|
203
|
+
# @param [When::TM::TemporalPosition] date
|
204
|
+
# @param [Hash] options dummy
|
205
|
+
#
|
206
|
+
# @return [When::TM::TemporalPosition] 日の出の時刻をイベント時刻とする
|
207
|
+
#
|
208
|
+
def sunrise(date, options={})
|
209
|
+
event = formula(date.location.iri).sunrise(date)
|
210
|
+
event.events = [@root['Sunrise']]
|
211
|
+
event
|
212
|
+
rescue
|
213
|
+
nil
|
214
|
+
end
|
215
|
+
|
216
|
+
#
|
217
|
+
# 日の入り
|
218
|
+
#
|
219
|
+
# @param [When::TM::TemporalPosition] date
|
220
|
+
# @param [Hash] options dummy
|
221
|
+
#
|
222
|
+
# @return [When::TM::TemporalPosition] 日の入りの時刻をイベント時刻とする
|
223
|
+
#
|
224
|
+
def sunset(date, options={})
|
225
|
+
event = formula(date.location.iri).sunset(date)
|
226
|
+
event.events = [@root['Sunset']]
|
227
|
+
event
|
228
|
+
rescue
|
229
|
+
nil
|
230
|
+
end
|
231
|
+
|
232
|
+
#
|
233
|
+
# 正午月齢
|
234
|
+
#
|
235
|
+
# @param [When::TM::TemporalPosition] date
|
236
|
+
# @param [Hash] options dummy
|
237
|
+
#
|
238
|
+
# @return [Numeric] 正午における朔からの経過日数
|
239
|
+
#
|
240
|
+
def moon_age(date, options={})
|
241
|
+
@phase ||= When.CalendarNote('LunarPhases')
|
242
|
+
noon = date.floor(When::DAY,When::SYSTEM) + 0.5
|
243
|
+
@root['Moon_Age'][noon.to_f - @phase.term(noon, [-30.0,30.0]).to_f]
|
244
|
+
end
|
245
|
+
|
246
|
+
#
|
247
|
+
# 月の出
|
248
|
+
#
|
249
|
+
# @param [When::TM::TemporalPosition] date
|
250
|
+
# @param [Hash] options dummy
|
251
|
+
#
|
252
|
+
# @return [When::TM::TemporalPosition] 月の出の時刻をイベント時刻とする
|
253
|
+
#
|
254
|
+
def moonrise(date, options={})
|
255
|
+
event = formula(date.location.iri).moonrise(date)
|
256
|
+
event.events = [@root['Moonrise']]
|
257
|
+
event
|
258
|
+
rescue
|
259
|
+
nil
|
260
|
+
end
|
261
|
+
|
262
|
+
#
|
263
|
+
# 月の入り
|
264
|
+
#
|
265
|
+
# @param [When::TM::TemporalPosition] date
|
266
|
+
# @param [Hash] options dummy
|
267
|
+
#
|
268
|
+
# @return [When::TM::TemporalPosition] 月の入りの時刻をイベント時刻とする
|
269
|
+
#
|
270
|
+
def moonset(date, options={})
|
271
|
+
event = formula(date.location.iri).moonset(date)
|
272
|
+
event.events = [@root['Moonset']]
|
273
|
+
event
|
274
|
+
rescue
|
275
|
+
nil
|
276
|
+
end
|
277
|
+
|
278
|
+
# 干潮・満潮の日時
|
279
|
+
#
|
280
|
+
# @param [When::TM::TemporalPosition] date
|
281
|
+
# @param [Hash] options
|
282
|
+
# @option options [String] tide 潮汐計算方式 'Horizontal' - 地平高度基準, 'Equatorial' - 子午線通過基準(デフォルト)
|
283
|
+
#
|
284
|
+
# @return [Array<Array<Integer, When::TM::TemporalPosotion>>] 干潮・満潮の日時の Array
|
285
|
+
#
|
286
|
+
# [Integer] +1:満潮, -1:干潮
|
287
|
+
#
|
288
|
+
# [When::TM::TemporalPosotion] 干潮・満潮の日時
|
289
|
+
#
|
290
|
+
#
|
291
|
+
def tide(date, options={})
|
292
|
+
return nil unless @interval
|
293
|
+
@target ||= When.Resource('_ep:Moon')
|
294
|
+
events = @root['Tide']
|
295
|
+
form = formula(date.location.iri)
|
296
|
+
type = options[:tide] =~ /^horizon/i ? nil : 0
|
297
|
+
|
298
|
+
now = +date
|
299
|
+
high_tides = []
|
300
|
+
5.times do |i|
|
301
|
+
high_tide = form.day_event(now + i - 2, type, @target) + @interval
|
302
|
+
high_tides << high_tide if high_tides.size == 0 || high_tide > high_tides[-1] + 0.5
|
303
|
+
end
|
304
|
+
tides = []
|
305
|
+
|
306
|
+
(high_tides.size-1).times do |i|
|
307
|
+
tides << [0, high_tides[i]]
|
308
|
+
tides << [1, 0.75*high_tides[i] + 0.25*high_tides[i+1]]
|
309
|
+
tides << [0, 0.50*high_tides[i] + 0.50*high_tides[i+1]]
|
310
|
+
tides << [1, 0.25*high_tides[i] + 0.75*high_tides[i+1]]
|
311
|
+
end
|
312
|
+
tides << [0, high_tides[-1]]
|
313
|
+
|
314
|
+
today = +date.floor(When::DAY)...+date.ceil(When::DAY)
|
315
|
+
seed = date._attr
|
316
|
+
seed[:clock] ||= When::TM::Clock.local_time
|
317
|
+
tides.select {|x| today.include?(x[1])}.map {|x|
|
318
|
+
d = form._to_seed_type(x[1], seed)
|
319
|
+
d.events = [events[x[0]]]
|
320
|
+
d
|
321
|
+
}
|
322
|
+
rescue
|
323
|
+
nil
|
324
|
+
end
|
325
|
+
|
326
|
+
private
|
327
|
+
|
328
|
+
# オブジェクトの正規化
|
329
|
+
# long - 計算に用いる経度 / 度
|
330
|
+
# lat - 計算に用いる緯度 / 度
|
331
|
+
# alt - 計算に用いる高度 / m
|
332
|
+
# interval - 高潮間隔(月の子午線通過から満潮までの時間) / 時間
|
333
|
+
def _normalize(args=[], options={})
|
334
|
+
if @location
|
335
|
+
@location = When.Resource(@location)
|
336
|
+
@formula = When.Resource(@formula || "Formula?location=(#{@location.iri})", '_ep:')
|
337
|
+
else
|
338
|
+
@formula = {}
|
339
|
+
end
|
340
|
+
@interval = @interval.sub('@','.').to_f / 24 if @interval
|
341
|
+
@root = When.CalendarNote('EphemericNote/NoteObjects::day')
|
342
|
+
@prime ||= [%w(Month), %w(Sunrise Sunset Moon_Age)]
|
343
|
+
super
|
344
|
+
end
|
345
|
+
|
346
|
+
# 計算に用いる Ephemeris
|
347
|
+
def formula(location)
|
348
|
+
return @formula unless @formula.kind_of?(Hash)
|
349
|
+
@formula[location] ||= When.Resource("Formula?location=(#{location})", '_ep:')
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|