分類
懶得分類

國曆與農曆同日的計算-為什麼農曆每19年有7個閏月

由於國曆(陽曆)是以地球繞行一週為一年, 而農曆(陰曆)則是以月亮繞行一週為一個月, 而日的單位則為地球自轉一週為一日, 所以若需要同一日的算法如下:

平均一年為 365.2422日, 一個農曆月為 29.5306日, 以現行農曆每19年7個閏月來看, 共計 (19*12+7) * 29.5306 = 6939.691日.

而以19年國曆來看, 共計 19 * 365.2422 = 6939.608日, 所以若以農曆每19年7閏月來看, 則很有機會會同一日期, 若有前後差, 基本上與閏年有關, 所以會有一點落差.

可以參考:

分類
懶得分類

有趣的1752年9月

昨天朋友提到有趣的月曆, 其中 1752年 9月短少了一些日子, 9/3~9/13 少了這幾天.

利用 linux 下的指令 cal 1752 進行查找, 果然得到有趣的結果:

這個鄉野傳說, 不, 原因是這樣的:

https://zh.wikipedia.org/wiki/1752%E5%B9%B4
https://en.wikipedia.org/wiki/1752
https://people.cs.nctu.edu.tw/~tsaiwn/introcs/03_Labs/Lab08/

所以就有這麼有趣的現象了.

但是 browser 就沒辦法做到了…
https://codepen.io/timhuang/pen/QRNWxY

分類
系統技術

使用datauri建立.ics(iCal)行事曆下載

使用 .ics (iCal) 行事曆檔案供使用者下載後, 加入行事曆(如 outlook, google calendar)可以方便提醒使用者, 一般可以先利用 .ics 產生器如:

http://www.icalmaker.com/

進行檔案建立後, 再提供使用者對應的 .ics 檔案下載即可, 但若想使用 datauri 的方式呢?

可以先將檔案內容編成 base64 編碼後, 使用:

<a download="reminder.ics" href="data:text/calendar;base64,QkVHSU46...>reminder.ics</a>

語法來進行, 可以參考 demo:

https://codepen.io/timhuang/pen/ErpYWM

Datauri 可以參考之前圖片用法的介紹:

https://diary.tw/archives/1040

參考資料:

https://stackoverflow.com/questions/3916191/download-data-url-file

分類
.net

.net中的日曆轉換

在 .net 中有個 System.Globalization 裡, 有許多國家的日曆可用, 像是民國年的轉換, 或是農曆年的轉換, 這個真的很有意思. 也免除了在程式中, 程式設計人員的轉換麻煩.

先來看看民國年的部分, 程式如下:

TaiwanCalendar tc = new TaiwanCalendar();            
int year = tc.GetYear(DateTime.Now); //現在是西元2010年
MessageBox.Show(year.ToString()); // 會秀出 99

有趣的, 我想試看看早於 1911 年(也就是民國還未成立時, 會發生什麼事), 結果如下, 會發生一個 OutOfRangeException 如下圖:

也就是必須是西元陽曆1912/1/1 00:00:00 ~ 9999/12/31 23:59:59 才行, 否則會有 Exception.

這樣當然很合理啦. 也避免一些錯誤輸入的狀況.

另外來看看農曆, (或稱陰曆, 月亮曆), 來試看看今天是農曆的日期:

TaiwanLunisolarCalendar tlc = new TaiwanLunisolarCalendar();            
int month = tlc.GetMonth(DateTime.Now);
int day = tlc.GetDayOfMonth(DateTime.Now);
MessageBox.Show(month.ToString() + "/" + day.ToString());

今天是 2010/6/29, 秀出的結果是 5/18 相當正確, 十分方便. 不過似乎沒有反過來的查法, 但有正向查詢應該就很夠用了, 反向查再稍加手腳即可.

另外也可以取出天干(GetCelestialStem()), 地支(GetTerrestrialBranch())的功能. 還有日本曆(JapaneseCalendar), 很有意思.

參考資料:
http://dotnetmis91.blogspot.com/2010/06/dotnet-systemglobalization.html
http://anita-lo.blogspot.com/2008/03/net_20.html
這篇是日本曆的年號: http://blog.csdn.net/xue1234567890/archive/2009/10/24/4723056.aspx