亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

Shell腳本實現的陽歷轉農歷代碼分享

2020-07-27 19:13:34
字體:
來源:轉載
供稿:網友

閑來無事,想在Linux下用shell寫一個陽歷轉農歷的腳本,斷斷續續大概一個星期終于搞定?,F在拿出來與大家分享。

1、緣由

本腳本實現原理是查表法(因為公式有誤差);基于農歷新年為基準,對農歷新年前后兩個不同的農歷進行計算。

寫這個腳本之前是想在Linux 終端命令提示符中加入陽歷及農歷日期。在Ubuntu中有Lunar軟件可以獲取農歷日期,但在Fedora或CentOS中并沒有類似軟件,所以就想自己來實現一個,但網上用其他語言寫的一大把,如果再寫沒什么必要。所以就想用shell來寫一個。

2、功能及使用

功能:將具體的陽歷日期轉換為農歷日期。

時間范圍:1901~2099,對應農歷年時間為4598~4796

參數格式(無參數默認為當前系統日期):yyyymmdd

如2013年1月1日:

復制代碼 代碼如下:

$./lunar.sh 20130101
4709-11-20

3、完整數據

完整數據下載鏈接:
http://xiazai.VeVB.COm/201408/tools/lunar-20131202.7z

包中文件:

lunar.sh 主腳本,具體實現

datebases 農歷元數據

change.log 更改日志

readme 腳本說明及注意事項

主要腳本lunar.sh代碼如下:

#!/bin/shDATE=$@[ "$DATE" = "" ] && DATE=$(date +%Y%m%d)databases_path=databasesdate_year=$(echo $DATE |sed 's/^/(./{4/}/).*//1/')date_month=$(echo $DATE |sed 's/.*/(../)..$//1/')date_day=$(echo $DATE |sed 's/.*/(../)$//1/')date_days=$(date -d $DATE +%j)lunar_year=$(sed /$date_year/!d $databases_path |sed 's/^/(..../).*//1/')lunar_year_data=$(sed /$date_year/!d $databases_path |sed 's/.*/ /(.*/)//1/')lunar_year_data_bin=$(echo "ibase=16;obase=2;$lunar_year_data"|bc |sed -e :a -e 's/^./{1,23/}$/0&/;ta')new_year_month_bin=$(echo $lunar_year_data_bin |sed -e 's/^./{17/}/(./{2/}/).*//1/')new_year_month=$(echo "ibase=2;$new_year_month_bin"|bc |sed -e :a -e 's/^./{1,1/}$/0&/;ta')new_year_day_bin=$(echo $lunar_year_data_bin |sed -e 's/.*/(./{5/}/)$//1/')new_year_day=$(echo "ibase=2;$new_year_day_bin"|bc |sed -e :a -e 's/^./{1,1/}$/0&/;ta')new_year_days=$(date -d $date_year$new_year_month$new_year_day +%j)lunar_days=$(expr $date_days - $new_year_days + 1)befor_or_after=0if [ "$lunar_days" -le "0" ]; then  befor_or_after=1  date_year=$(($date_year - 1))  lunar_year=$(sed /$date_year/!d $databases_path |sed 's/^/(..../).*//1/')  lunar_year_data=$(sed /$date_year/!d $databases_path |sed 's/.*/ /(.*/)//1/')  lunar_year_data_bin=$(echo "ibase=16;obase=2;$lunar_year_data"|bc |sed -e :a -e 's/^./{1,23/}$/0&/;ta')filunar_leap_month_bin=$(echo $lunar_year_data_bin |sed -e 's/^/(./{4/}/).*//1/')lunar_leap_month=$(echo "ibase=2;$lunar_leap_month_bin"|bc)lunar_month_all_bin=$(echo $lunar_year_data_bin |sed -e 's/^./{4/}/(./{13/}/).*//1/')[ "$lunar_leap_month" = "0" ] && lunar_month_all_bin=$(echo $lunar_year_data_bin |sed -e 's/^./{4/}/(./{12/}/).*//1/')lunar_month_all=$(echo $lunar_month_all_bin |sed -e 's/0/29/ /g' |sed -e 's/1/30/ /g')if [ "$befor_or_after" = "0" ];then  lunar_month=1  lunar_day=$lunar_days  for i in $lunar_month_all  do   [ "$lunar_day" -gt "$i" ] && lunar_day=$(($lunar_day - $i)) && lunar_month=$(($lunar_month + 1))   [ "$lunar_day" = "$i" ] && break  doneelse  lunar_month=12  lunar_day=$((-$lunar_days))  lunar_month_all_bin=$(echo $lunar_month_all_bin |rev)  lunar_month_all=$(echo $lunar_month_all_bin |sed -e 's/0/29/ /g' |sed -e 's/1/30/ /g')  for i in $lunar_month_all  do   if [ "$lunar_day" -gt "$i" ]; then     lunar_day=$(($lunar_day - $i))     lunar_month=$(($lunar_month - 1))   else     lunar_day=$(($i - $lunar_day))     break   fi  donefiif [ "$lunar_leap_month" = "0" ]; then  echo $lunar_year-$lunar_month-$lunar_dayelse  if [ "$lunar_leap_month" -ge "$lunar_month" ]; then   echo $lunar_year-$lunar_month-$lunar_day  elif [ "$befor_or_after" = "0" ]; then   if [ "$(($lunar_leap_month + 1))" = "$lunar_month" ];then     lunar_month=$(($lunar_month - 1))     echo $lunar_year-*$lunar_month-$lunar_day   else     lunar_month=$(($lunar_month - 1))     echo $lunar_year-$lunar_month-$lunar_day   fi  else   echo $lunar_year-$lunar_month-$lunar_day  fifilunar.sh

4 修改歷史

2013-12-02

發現bug:如果農歷上個月是大月,本月為小月,則上個月的三十輸出為本月的初一,原因是上個月剩下30天,這正好是上個月的三十,而本月是29天,29<30,下一次循環的時候又減本月的天數,使得上個月的三十成為本月的初一

bug修改:添加判斷語句,如果農歷剩余天數等于當月的天數則不再循環

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中国china体内裑精亚洲片| 国内精品小视频| 成人午夜小视频| 精品小视频在线| 热久久视久久精品18亚洲精品| 欧美激情在线有限公司| 97久久久免费福利网址| 91香蕉嫩草影院入口| 欧美高清一级大片| 国语自产精品视频在免费| 国产日韩av高清| 精品国产乱码久久久久久天美| 日本久久久久久久久| 欧美一乱一性一交一视频| 日韩高清免费在线| 91沈先生在线观看| 91色在线观看| 成人黄色生活片| 中文字幕亚洲自拍| 岛国视频午夜一区免费在线观看| 丝袜亚洲另类欧美重口| 国产美女被下药99| 亚洲国产精品99| 久久影视电视剧免费网站| 91在线色戒在线| 久久久精品一区二区三区| 中文字幕少妇一区二区三区| 中文字幕日韩欧美在线视频| 日本一区二区在线免费播放| 欧美激情视频网站| 国外成人性视频| 亚洲人成人99网站| 4k岛国日韩精品**专区| 成人av.网址在线网站| 日韩欧美国产骚| 欧美床上激情在线观看| 国产美女主播一区| 一本一道久久a久久精品逆3p| 国模精品一区二区三区色天香| 日韩av免费在线观看| 97精品在线视频| 亚洲欧洲在线看| 日韩中文字幕在线| 国产成人一区二区三区电影| 91在线视频九色| 国产成人av在线| 欧美性xxxxxxxxx| 国产精品白嫩初高中害羞小美女| 91免费精品国偷自产在线| 97热在线精品视频在线观看| 国产亚洲欧美视频| yw.139尤物在线精品视频| 国产在线一区二区三区| 中文字幕亚洲欧美| 精品国产一区二区在线| 欧美性xxxxxxx| 国产精品香蕉在线观看| 国产精品久久久91| 91中文字幕在线观看| 热99精品里视频精品| 欧美猛交免费看| 国产精品免费久久久久久| 久久不射热爱视频精品| 欧美亚洲另类视频| 亚洲黄色在线看| 亚洲午夜久久久久久久| 亚洲影影院av| 国产精品亚发布| 欧美黑人又粗大| 在线播放国产一区中文字幕剧情欧美| 国产亚洲在线播放| 97久久精品在线| 91色p视频在线| 国内精品视频一区| 欧美在线国产精品| 国产精品视频中文字幕91| 精品无人区太爽高潮在线播放| 成人www视频在线观看| 亚洲欧美国产日韩天堂区| 欧美性猛交xxxx乱大交极品| 日韩中文字幕在线观看| 久久久精品一区二区三区| 久久久国产一区二区| 91精品视频观看| 亚洲综合中文字幕68页| 国产精品成人va在线观看| 国内精品久久久久久久久| 国产精品88a∨| 欧美国产第二页| 国产精品亚洲аv天堂网| 久久国产色av| 91久久国产精品91久久性色| 日韩av在线影视| 国产成人精品在线| 国产在线观看一区二区三区| 久久久久亚洲精品成人网小说| 国产美女久久久| 91久久夜色精品国产网站| 欧美激情精品久久久久久蜜臀| 日韩欧美在线免费观看| 欧美成人精品一区| 欧美特黄级在线| 国产精品久久中文| 日韩视频在线免费观看| 国产成人一区二| 国产精品久久久久久久午夜| 国产噜噜噜噜噜久久久久久久久| 久久理论片午夜琪琪电影网| 日韩av黄色在线观看| 午夜免费日韩视频| 欧美日韩激情小视频| 精品久久久久久久久久ntr影视| 国产美女直播视频一区| 国产一区二区在线免费| 97在线日本国产| 性色av一区二区三区在线观看| 欧美成人免费va影院高清| 久久久久久久久久久成人| 欧美贵妇videos办公室| 亚洲人成网站999久久久综合| 亚洲区在线播放| 91产国在线观看动作片喷水| 一个人看的www久久| 日韩视频欧美视频| 伊人久久男人天堂| 国产丝袜视频一区| 久久久久久亚洲精品中文字幕| 国产精品永久在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 精品一区二区三区三区| 日韩电影在线观看永久视频免费网站| 欧美国产日韩一区二区| 黄色一区二区在线| 欧美精品videossex88| 最新69国产成人精品视频免费| 高清欧美一区二区三区| 欧美精品少妇videofree| 亚洲国产成人久久综合| 日韩欧美有码在线| 欧美日韩福利视频| 欧美精品在线第一页| 欧美香蕉大胸在线视频观看| 91久久精品视频| 国产成人精品在线播放| 国产91精品高潮白浆喷水| 中文字幕无线精品亚洲乱码一区| 精品视频9999| 国产免费一区视频观看免费| 国内精品在线一区| 亚洲国产精品成人av| 亚洲aaa激情| 97在线看免费观看视频在线观看| 久久精品成人欧美大片| 亚洲国产高清高潮精品美女| 伊是香蕉大人久久| 久久久免费观看视频| 国产精品嫩草影院久久久| 国产精品福利观看| 国产精品你懂得| 亚洲国产精品yw在线观看| 久久久精品网站| 欧美日韩激情视频| 91成人天堂久久成人| 亚洲最大成人免费视频|