雙喜臨門
註冊: 2001-11-13
文章數: 2707
來自: 台北市
要如何以西曆日求出該年農曆節氣為西曆幾月幾日呢?
以下使用概估法求值,這是一個很偷懶的方法,誤差在幾小時內,
但個人認為用來以日為單位換算日月柱資料應該是可以容忍的
誤差範圍,不然每隔19年多作校正一次誤差也可縮短誤判的機率
以下使用 Visual Basic 來說明計算方式,寫成模組呼叫
範例:求 2002 年 春分 為幾月幾日?
使用時如以下方式 ,答案會輸出到Theday ( 2002/3/21 am01:15:37 )
正確時間是 2002/3/21 am03:07 相差 2 小時
Dim Theday as Date
Theday = sTermInfo(2002,4)
msgbox(Theday)
======================================================
模組如下
Public sTermInfo(24) As Long
Public Function sTerm(ByVal Year As Integer, ByVal Term As Integer) As Date
Dim offSec As Double
Dim offDate As Double
sTermInfo(1) = 0 '立春
sTermInfo(2) = 1282183 '雨水
sTermInfo(3) = 2572220 '驚蜇
sTermInfo(4) = 3872850 '春分
sTermInfo(5) = 5184070 '清明
sTermInfo(6) = 6507336 '榖雨
sTermInfo(7) = 7841021 '立夏
sTermInfo(8) = 9185126 '小滿
sTermInfo(9) = 10536446 '芒種
sTermInfo(10) = 11893696 '夏至
sTermInfo(11) = 13252719 '小暑
sTermInfo(12) = 14611477 '大暑
sTermInfo(13) = 15965944 '立秋
sTermInfo(14) = 17314099 '處暑
sTermInfo(15) = 18653107 '白露
sTermInfo(16) = 19981720 '秋分
sTermInfo(17) = 21298898 '寒露
sTermInfo(18) = 22604625 '霜降
sTermInfo(19) = 23899693 '立冬
sTermInfo(20) = 25185380 '小雪
sTermInfo(21) = 26463860 '大雪
sTermInfo(22) = 27737403 '冬至
sTermInfo(23) = 29008912 '小寒
sTermInfo(24) = 30281096 '大寒
offSec = ((31556925.9747 * (Year - 1900)) + sTermInfo(Term))
'一年長度之 31556925.9747 分之一為一秒
offHour = offSec / 3600 '秒化時
sTerm = DateAdd("h", offHour, #2/4/1900 1:51:37 PM#)
End Function
雙喜臨門
註冊: 2001-11-13
文章數: 2707
來自: 台北市
改用此法計算節氣換月柱的更新檔 為一單獨更新檔 EG.zip
解開後將 EG.exe 拷貝覆蓋即可,
其實之前的作法(歸納法)也不會相差很多啦! 感謝 WaWa之前提供給我的
歸納法公式
這支更新檔是給認為有需要的人用的,用心安的吧?
=================================================================
一些相關的常識資訊可以參考
http://weather.seed.net.tw/docs/V2.0/astron/question/q-cal.htmhttp://go8.163.com/msz/index.html
編輯者: 小凱哥 (2002-03-14 13:38:57)
雙喜臨門
註冊: 2001-11-13
文章數: 2707
來自: 台北市
我用站長的精確計算和我的概估法作了一份表格( 已加上 +8 小時)
這樣的方法好不好用是見人見智的問題,站在程式設計的立場
我是比較偏向簡單的做法啦,據站長說,他的資料是依據星曆
資料庫運算得來的
西曆2002年節氣 【概估法】 【精確值】
====================================================
立春 2002/2/4 上午 05:51:37 2002/2/4 上午08:24:05
雨水 2002/2/19 上午 02:51:37 2002/2/19 上午04:13:19
驚蜇 2002/3/6 上午 12:51:37 2002/3/6 上午02:27:32
春分 2002/3/21 上午 01:51:37 2002/3/21 上午03:16:08
清明 2002/4/5 上午 05:51:37 2002/4/5 上午07:18:16
榖雨 2002/4/20 下午 01:51:37 2002/4/20 下午02:20:28
立夏 2002/5/5 下午 11:51:37 2002/5/6 上午00:37:16
小滿 2002/5/21 下午 01:51:37 2002/5/21 下午01:29:05
芒種 2002/6/6 上午 04:51:37 2002/6/6 上午04:44:46
夏至 2002/6/21 下午 09:51:37 2002/6/21 下午09:24:24
小暑 2002/7/7 下午 03:51:37 2002/7/7 下午02:56:11
大暑 2002/7/23 上午 08:51:37 2002/7/23 上午08:14:51
立秋 2002/8/8 上午 12:51:37 2002/8/8 上午00:39:18
處暑 2002/8/23 下午 03:51:37 2002/8/23 下午03:16:58
白露 2002/9/8 上午 03:51:37 2002/9/8 上午03:31:01
秋分 2002/9/23 下午 12:51:37 2002/9/23 下午12:55:22
寒露 2002/10/8 下午 06:51:37 2002/10/8 下午07:09:17
霜降 2002/10/23下午 08:51:37 2002/10/23下午10:17:49
立冬 2002/11/7 下午 08:51:37 2002/11/7 下午10:21:48
小雪 2002/11/22下午 05:51:37 2002/11/22下午06:53:43
大雪 2002/12/7 下午 12:51:37 2002/12/7 下午03:14:12
冬至 2002/12/22上午 06:51:37 2002/12/22上午09:14:21
小寒 2003/1/5 下午 11:51:37 2003/1/6 上午02:27:42
大寒 2003/1/20 下午 05:51:37 2003/1/20 下午07:52:33
亢龍有悔
註冊: 2001-08-09
文章數: 859
來自: 葉柏賢(台灣/桃園)
Dear 小凱哥:
誤差明細如下,以「驚蜇」及「大雪」最顯著!
^_^
西曆2002年節氣 【概估法】 【精確值】
====================================================
立春 2002/2/4 上午 05:51:37 2002/2/4 上午08:24:05 ->提早: 2:32:28
雨水 2002/2/19 上午 02:51:37 2002/2/19 上午04:13:19 ->提早: 1:21:42
驚蜇 2002/3/6 上午 12:51:37 2002/3/6 上午02:27:32 ->落後:-11:35:55
春分 2002/3/21 上午 01:51:37 2002/3/21 上午03:16:08 ->提早: 1:24:31
清明 2002/4/5 上午 05:51:37 2002/4/5 上午07:18:16 ->提早: 1:26:39
榖雨 2002/4/20 下午 01:51:37 2002/4/20 下午02:20:28 ->提早: 0:28:51
立夏 2002/5/5 下午 11:51:37 2002/5/6 上午00:37:16 ->提早: 0:45:39
小滿 2002/5/21 下午 01:51:37 2002/5/21 下午01:29:05 ->落後: -1:37:28
芒種 2002/6/6 上午 04:51:37 2002/6/6 上午04:44:46 ->落後: -1:53: 9
夏至 2002/6/21 下午 09:51:37 2002/6/21 下午09:24:24 ->落後: -1:32:47
小暑 2002/7/7 下午 03:51:37 2002/7/7 下午02:56:11 ->落後: -1: 4:34
大暑 2002/7/23 上午 08:51:37 2002/7/23 上午08:14:51 ->落後: -1:23:14
立秋 2002/8/8 上午 12:51:37 2002/8/8 上午00:39:18 ->落後: -13:47:41
處暑 2002/8/23 下午 03:51:37 2002/8/23 下午03:16:58 ->落後: -1:25:21
白露 2002/9/8 上午 03:51:37 2002/9/8 上午03:31:01 ->落後: -1:39:24
秋分 2002/9/23 下午 12:51:37 2002/9/23 下午12:55:22 ->提早: 0: 3:45
寒露 2002/10/8 下午 06:51:37 2002/10/8 下午07:09:17 ->提早: 0:17:40
霜降 2002/10/23下午 08:51:37 2002/10/23下午10:17:49 ->提早: 1:26:12
立冬 2002/11/7 下午 08:51:37 2002/11/7 下午10:21:48 ->提早: 1:30:11
小雪 2002/11/22下午 05:51:37 2002/11/22下午06:53:43 ->提早: 1: 2: 6
大雪 2002/12/7 下午 12:51:37 2002/12/7 下午03:14:12 ->落後:-10:22:35
冬至 2002/12/22上午 06:51:37 2002/12/22上午09:14:21 ->提早: 2:22:44
小寒 2003/1/5 下午 11:51:37 2003/1/6 上午02:27:42 ->提早: 2:36: 5
大寒 2003/1/20 下午 05:51:37 2003/1/20 下午07:52:33 ->提早: 2: 0:56
_________________________
南無阿彌陀佛 感恩...
NAMO AMITABHA BUDDHA thanksgiving
雙喜臨門
註冊: 2001-11-13
文章數: 2707
來自: 台北市
adamyeh 大大:
感謝您花時間把誤差求出,提出這樣的方法存脆是為了方便
,如果只看日期,用以判斷節氣為何日的話是方便不少,雖然可能
存在一天的誤差,
也難怪有交節氣的正負12小時的這一天當中最好不要卜卦,
最怕斷不準確之說,此例也剛好可以當一個小註腳.
如果要準確推算精確時間就非得用天文計算公式配合星曆資料不可了
這對不是天文物理的專家來說可是件麻煩事.
雙喜臨門
註冊: 2001-11-13
文章數: 2707
來自: 台北市
謝謝站長提供XML的轉換功能,您的程式真的很好用
至於 .Net 的問題就再觀看一陣子再說吧.
C 和 Java 確實是很好的工具,但是Basic 比較 lange like 啦
我想許多愛好者也是這樣想的吧