/
588.txt
239 lines (185 loc) · 15.6 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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
[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>
- [53] [CITE[スクリプト ダウンロード]], [TIME[2020-09-21T03:54:19.000Z]] <http://www.2chan.net/script/>
-- [9] ([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>
- [441] [CITE@ja[[[旧暦]]カレンダー - 仕事に役立つエクセル実践問題集]], [TIME[2016-09-15 07:57:00 +09:00]] <http://mt-soft.sakura.ne.jp/kyozai/excel_vba/310_vba_chu/60_lunar-solar-calendar/index.html>
-- [TIME[西暦2001年][year:2001]]-[TIME[2030年][year:2030]]
-- 明記されていないが西暦2017年問題を持つのが [[qreki]] と同じ。
- [451] [CITE@ja[宿曜経の二十七宿暦 [[宿曜]]カレンダー]], [TIME[2020-07-06 06:18:00 +09:00]] <https://nakshatra.tokyo/pc/calendar/27/>
-- 明記されていないが西暦2017年問題の修正以外は [[qreki]] と同じ。
- [52] [CITE@ja[公開スクリプト]], [TIME[2005-01-29T00:03:02.000Z]], [TIME[2020-09-21T03:52:54.784Z]] <http://hymnsong.s7.xrea.com/script.html>
- [54] [CITE[ソフト工作室]], [TIME[2020-09-21T04:03:48.000Z]] <http://kikuchisan.net/wsp/java/java59.html>
- [56] [CITE@en[Calendar/QReki.java at master · paveway/Calendar · GitHub]], [TIME[2021-02-25T05:47:14.000Z]] <https://github.com/paveway/Calendar/blob/master/src/info/paveway/external/QReki.java>
]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]
[FIG(quote)[
[FIGCAPTION[
[57]
[CITE[C版 旧暦計算プログラム]],
by 白井豊(Converted in 2017.08.25),
[TIME[2017-08-24T23:44:28.000Z]], [TIME[2021-02-25T05:50:11.686Z]] <http://souzousha.iinaa.net/www/Source/oldDateC.txt>
]FIGCAPTION]
[PRE[
// 旧暦の2017年問題で, 新月になる旧暦2017年2月1日は
// 新暦2月26日23時58分ですが,これを2月26日とするか27日にするか
// という問題があり,本プログラムでは2月27日となります。
//
// もし,新暦2017年2月26日を旧暦2017年2月1日とみなす場合,
// 求められた日付を以下のようにずらす必要があります。
//
// 1/30→2/1, 2/1~2/29 →2/2~2/30
]PRE]
]FIG]
;; [58] 2月27日とする本プログラムは誤り。
[TIME[2017-02-27]]を半年も過ぎた[TIME[2017-08-25]]にこのような誤ったプログラムをわざわざ移植するという不思議 (過ぎたからこそ、
間違っていても構わないということかも?)。
]REFS]
* メモ
[50] [CITE[旧暦計算スクリプト]], [TIME[2019-05-14 08:27:47 +09:00]] <http://www.spin.ne.jp/~sibuya-auto/qreki/qreki.html>
[51] 「[[令和]]」が追加されているのでメンテナンスが継続されていることはわかるが、
肝心の計算は [[qreki]] そのもののように見える。
- [55] [CITE@ja[旧暦正月だから年号電卓を作ってみた|ひまなひと|[[note]]]],
[[ひまなひと]],
2020/01/25 19:41,
[TIME[2021-02-25T05:43:30.000Z]] <https://note.com/himajin_no_asobi/n/n065d236b69d6>
[FIG(quote)[
[FIGCAPTION[
[59] [CITE[旧暦六曜Javaソースプログラム公開!: がらくた研究室]]
(2009年4月 1日 (水) [TIME[2021-02-25T06:05:53.000Z]])
<http://yamatonoie.cocolog-nifty.com/ave/2009/04/post-e1ce.html>
]FIGCAPTION]
> 内容を理解せずに移植しているので計算結果は責任が持てません!
]FIG]
- [60] [CITE@ja[旧暦カレンダー(2022年2月)| [[アラクネ]]]], [TIME[2022-02-19T11:51:31.000Z]] <https://www.arachne.jp/onlinecalendar/kyureki/>
[61]
詳しく調べていませんが、
[TIME[西暦2033年][2033]]の[[月名]]より、
[[qreki]]
系の実装と推測されます。
[TIME[西暦2224年][2224]]について
[[qreki]]
と同じく
(>>29)
閏2月になります。
ただし[TIME[西暦2017年][2017]]は[TIME[2017-02-26]]が2月1日となる、
オリジナル
[[qreki]]
とは違う挙動のものを使っているようです。