/
588.txt
158 lines (124 loc) · 11.9 KB
/
588.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
[1] [DFN[[[qreki]]]] は[[グレゴリオ暦]]から[[旧暦]]に変換できるプログラムです。
'''[TIME[1948年][year:1948]]から[TIME[2016年][year:2016]]'''の間の[[日付]]を正しく扱えます。
[2] オリジナルは [[AWK]] [[スクリプト]]ですが、色々な言語に移植されて広く使われています
(>>6)。
[40] 後述の通り、もはや本ソフトウェアを使用するべきではありません。
[FIG(important)[
[19] [[旧暦]]一般や他の旧暦変換表等との比較については、[[旧暦]]を参照してください。
]FIG]
* オリジナル版
[3] このスクリプトは[[先発グレゴリオ暦]] (0年あり) を入力とし、
[[旧暦]]と[[六曜]]を出力としています。
[5] ただしこのスクリプトは[[自由ソフトウェア]]ではありませんから、注意が必要です。
[4] [[qreki]] のドキュメントには[[旧暦]]についての詳細な解説が含まれています。 >>8
からダウンロードできるファイルに含まれているほか、 >>27 にも転載されています。
[REFS[
- [8] [CITE[QRSAMPの詳細情報 : Vector ソフトを探す!]] ([TIME[2014-09-05 03:38:32 +09:00]] 版) <http://www.vector.co.jp/soft/dos/personal/se016093.html>
- [27] [CITE[旧暦計算サンプルスクリプト Rev 1.1 説明書]] ([TIME[2008-02-08 08:59:26 +09:00]] 版) <http://api.sekido.info/qreki-doc>
]REFS]
* 移植版
[6] 次の移植版が知られています。
[REFS[
- [7] [CITE[旧暦計算ライブラリ(Perlによる旧暦計算プログラム)]] ([TIME[2014-05-27 12:48:31 +09:00]] 版) <http://www.paphio.jp/webcal/qreki.html>
- [9] [CITE[]] ([TIME[2012-12-13 06:09:51 +09:00]] 版) <http://www.2chan.net/script/qreki.php.txt>
- [16] [CITE[qreki.php が動かないので修正 - babu_babu_babooのごみ箱]] ([TIME[2014-08-12 15:30:55 +09:00]] 版) <http://d.hatena.ne.jp/babu_babu_baboo/20131129/1385688401>
- [10] [CITE[旧暦計算JavaScript]] ([TIME[2009-07-12 21:39:19 +09:00]] 版) <http://park1.wakwak.com/~y-nagano/Programs/koyomi/>
- [11] [CITE[旧暦 for VBの詳細情報 : Vector ソフトを探す!]] ([TIME[2014-09-09 08:02:13 +09:00]] 版) <http://www.vector.co.jp/soft/win95/personal/se243537.html?g>
- [12] [CITE[暦に興味を持ったので、旧暦計算プログラム QREKI.AWK を Python に移植してみた - 銀月の符号]] ([TIME[2013-06-06 05:05:23 +09:00]] 版) <http://d.hatena.ne.jp/fgshun/20091127/1259302979>
- [13] [CITE[旧暦六曜計算Javaソースプログラム]] ([TIME[2009-04-02 05:04:05 +09:00]] 版) <http://homepage1.nifty.com/ave/kaihatsu/qreki.htm>
- [43] [CITE@ja[旧暦計算プログラムの修正 | ハックノート]] ([TIME[2019-03-15 10:32:29 +09:00]]) <https://hacknote.jp/archives/6072/>
- [14] [CITE[旧暦を取得する Web API]] ([TIME[2012-03-21 14:30:31 +09:00]] 版) <http://api.sekido.info/qreki?output=usage>
- [36] [CITE[lib/Date/Qreki-ja.pod - search.cpan.org]] ([TIME[2018-05-20 12:49:46 +09:00]]) <http://search.cpan.org/dist/Date-Qreki/lib/Date/Qreki-ja.pod>
- [15] [CITE[qreki.plについて]] ([TIME[2001-04-05 04:49:24 +09:00]] 版) <http://homepage2.nifty.com/sophia0/qrekidisp.html>
- [34] [CITE@en[ozamasa/qreki]] ([TIME[2018-05-20 12:46:28 +09:00]]) <https://github.com/ozamasa/qreki>
-- [35] [CITE@ja[旧暦を計算するスクリプトを Gem にしました。 - ozamasa’s blog]] ([TIME[2018-05-20 12:46:48 +09:00]]) <http://ozamasa.hatenablog.jp/entry/2013/12/11/091231>
- [20] [CITE@en[suzunone/JapaneseDate: 日本の祝日や暦を扱うライブラリ]] ([TIME[2018-05-20 11:49:56 +09:00]]) <https://github.com/suzunone/JapaneseDate>
-- [21] [CITE@en[JapaneseDate/LunarCalendar.php at master · suzunone/JapaneseDate]] ([TIME[2018-05-20 11:50:07 +09:00]]) <https://github.com/suzunone/JapaneseDate/blob/master/src/Components/LunarCalendar.php>
-- [22] [CITE[PHPで日本の祝日、旧暦を扱えるライブラリを作った - Qiita]] ([TIME[2018-05-20 11:50:16 +09:00]]) <https://qiita.com/suzunone/items/949e71ea7ea86630524f>
- [170] [CITE@ja[暦API ~ 旧暦、六曜を取得できるAPIを無料で提供しています。 ~]] ([TIME[2016-01-16 14:46:04 +09:00]] 版) <http://koyomi.zing2.org/>
-- 明記されていないが計算結果から推測
- [37] [CITE@ja-JP[Yahoo!カレンダーヘルプ - 六曜、旧暦を表示するには]] ([TIME[2018-05-20 13:47:10 +09:00]]) <https://www.yahoo-help.jp/app/answers/detail/p/527/a_id/40990/~/%E5%85%AD%E6%9B%9C%E3%80%81%E6%97%A7%E6%9A%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF>
-- 明記されていないが計算結果から推測
-- [[閏月]]に対応しておらず、閏[VAR[n]]月が「[VAR[n]]」と表示される
-- 2017年 (>>151, >>24) だけ訂正済みの模様 [TIME[2018-05-20T04:55:57.700Z]]
- [39] [CITE[Scheme: ユリウス日を天保壬寅元暦(旧暦)に変換するやつ]] (@nakataSyunsuke 2018年03月31日に更新 [TIME[2018-06-16 16:13:32 +09:00]]) <https://qiita.com/nakataSyunsuke/items/b49d6105505fec71f07a>
- [41] [CITE@en[kumorig/qreki: Converts Gregorian dates into the old japanese lunar calendar "Kyuureki"(旧暦).]] ([TIME[2018-06-16 16:20:34 +09:00]]) <https://github.com/kumorig/qreki>
- [17] [CITE@en[PHPカレンダーで祝日と六曜を表示する]] ([TIME[2019-03-15 10:29:41 +09:00]]) <https://gist.github.com/himahack/29f4269cdf8103f6a578291cea352e16>
- [42] [CITE@ja[【サンプルあり】PHPで祝日と六曜入のカレンダーを作る方法【コピペでOK】 | えびたいライフ。]] ([TIME[2019-03-15 10:30:07 +09:00]]) <https://ebit4i.com/php-calendar/>
- [44] [CITE[自作androidアプリが暦の2017年問題に・・・: がらくた研究室]] ([TIME[2019-03-15 10:34:00 +09:00]]) <http://yamatonoie.cocolog-nifty.com/ave/2017/03/android2017-7a8.html>
- [45] [CITE@ja[- ぽちぽちぼちぼち。]] ([TIME[2019-03-15 10:43:17 +09:00]]) <http://fuji3.main.jp/MT/archives/2008/01/2008-01-29.php>
- [46] [CITE[旧暦六曜計算Javaソースプログラム]] ([TIME[2017-03-08 12:02:42 +09:00]]) <http://ave.la.coocan.jp/kaihatsu/qreki.htm>
- [47] [CITE@ja[ソフトウェア]] ([TIME[2019-01-09 01:00:53 +09:00]]) <https://www.lazy-moon.jp/soft/#qreki_py>
-- [48] [CITE@en[fgshun/qreki_py: 旧暦と六曜を計算]] ([TIME[2019-03-15 10:54:06 +09:00]]) <https://github.com/fgshun/qreki_py>
- [49] [CITE[多時間 Tips:So-netブログ]] ([TIME[2019-03-15 11:05:26 +09:00]]) <https://cm-tips.blog.so-net.ne.jp/index/2>
]REFS]
;; [38] [[Yahoo!カレンダー]]は[[元号]]表示、[[旧暦]]、[[六曜]]に対応しているのですが、
[[21世紀]]を扱えない [[qreki]] の不正確さがそのまま反映されていて残念な感じです。
* 正確性
[FIG(important)[
[18] [TIME[1948年][year:1948]]から[TIME[2016年][year:2016]]の間の日付については、
正しい結果を返すことが知られています。それ以外の期間については、
誤った結果を返す場合があります。
[33] 既に正しい結果を返せる期間を過ぎている以上、メンテナンスされていない本ソフトウェアを使うべきではありません。
移植版も正しく動作しない可能性が高く要注意です。
]FIG]
[23] オリジナル版には原理の説明も入っているのですが、
移植版は十分に説明していないことがあり、利用者に誤解を与える危険性があって要注意です。
[26] [[過去の日時]]については、実際の[[旧暦]]は時代により計算法が異なっていたところ、
本ソフトウェアは (意図的に) [[天保暦]]ベースの計算法にのみ対応しているため、
歴史的に正しい結果を得ることができません。従って、本ソフトウェアを歴史上の出来事に関する[[暦の換算]]に用いることはできません。
[SEE[ [[旧暦]] ]]
[25] [[将来の日時]]については、そもそも原理的に不確定なものであり、
本ソフトウェアが作成された[TIME[1994年][year:1994]]の時点よりも後の時代の[[日時]]を完全に予測できませんから、
正しい値を返さないとしても、必ずしも[[不具合]]というべきものではありません。
(かといってそれが有用かどうかはまた別の問題ですが。)
[30] [[旧暦2033年問題]]を正しく扱えません。本ソフトウェアが作成された時点では対策が確定していなかった
(問題も広く知られていなかった) のですから、無理も無いことです。
[SEE[ [[旧暦2033年問題]] ]]
[29] [TIME[2224年][year:2224]]について正しく扱えないことがドキュメントにも明記されています
[SRC[>>28]] が、これも[[旧暦2033年問題]]同様の問題であることが後に知られています。
[SEE[ [[旧暦]] ]]
[31] [[21世紀]]中では他に[TIME[2017年][year:2017]]、[TIME[2051年][year:2051]]、
[TIME[2074年][year:2074]]を正しく扱えません。
これらは[TIME[2000年][year:2000]]に出版された[CITE[21世紀暦]]で、
自転速度や誤差が原因で異なる[[日付]]になる可能性があると指摘されているもので
[WEAK[([CITE[21世紀暦]]は他に[TIME[2096年][year:2096]]も指摘しているが、これは [[qreki]] も正しい)]]、
[[qreki]] 以外の[[ソフトウェア]]も異なる結果を返す場合があります。
([[旧暦]>>24]) 参照。
[32] ただし、ここでは[CITE[21世紀暦]]が主たる表で採用しているものを正しいとしていますが、
未到来の[[日付]]は [[qreki]] の結果が正しい可能性も残っています。
[REFS[
[FIG(quote)[ [28] >>27
> 2224年 3月21日から、同年 4月18
日の期間(グレゴリオ暦法による日付)の月名が間違って表示する現象が確
認されています。 具体的には、 正しい答えが3月であるのに対して、 閏2
月と表示する現象です。中気の計算に問題があると判明していますが、 今の
所、良い対策方法が見つかりませんので、そのままにしてあります。
]FIG]
[FIG(quote)[
[FIGCAPTION[
[151] [CITE[旧暦を取得する Web API]]
([TIME[2012-03-21 23:30:31 +09:00]] 版)
<http://api.sekido.info/qreki?output=usage>
]FIGCAPTION]
[FIG(quote)[
> 本スクリプトの計算精度については、暦計算研究会編の「新こよみ便利帳」に記載の新旧対照表で、2000年から2020年までを確認したところ、2017年2月26日~同3月27日までが、旧暦・六曜表示に誤差のあることが確認されています。
[FIGCAPTION[
旧暦計算ライブラリ(Perlによる旧暦計算プログラム)
<http://www3.biwako.ne.jp/~nobuaki/qreki/index.html>
]FIGCAPTION]
]FIG]
]FIG]
[FIG(quote)[
[FIGCAPTION[
[24] [CITE[QReki.javaの不具合 - Qiita]]
(2017年03月13日に更新 [TIME[2018-05-20 11:56:12 +09:00]])
<https://qiita.com/yamori813/items/b4d2d3d34e25654ecbe6>
]FIGCAPTION]
> 日本時間の2/26はユリウス日の2457810.125から2457811.124となります。ところがQReki.javaの計算値は2457811.125400158となり次の日になってしまっているので旧暦の2/1が2/27になってしまっています。
> 日をまたぐ0.125日前後に新月になるとこのように誤差でずれてしまう事がありあります。計算で出すには1分は0.000694日なので小数点以下3-4桁くらいの精度が必要と思われます。
> そもそもQReki.javaのユリウス日の扱いはちょっとおかしい気がします。上記の数値はちょっといじって出しています。
> QReki.javaはawkスクリプトからの移植で、このawkスクリプトはいろいろな言語に移植されているようですが、他でも問題が起きている可能性があるかと思われます。
> [SNIP[]] 根本的に直すのは難しいのでアプリには2017/2/26から3/27までのworkaroundを入れました。
]FIG]
]REFS]