C語言實(shí)現(xiàn)古代時(shí)辰計(jì)時(shí)與現(xiàn)代時(shí)間換算
本人對各種算法感興趣,喜歡做一些算法題??赡苡信笥褜糯鷷r(shí)辰計(jì)時(shí)與現(xiàn)在時(shí)間換算感興趣,我就設(shè)計(jì)了此一種算法。
關(guān)于古代的時(shí)間表達(dá)法,也就是十二時(shí)辰法,從子丑......亥十二個(gè)時(shí)辰計(jì)時(shí)由來以久,自古以來就用此法計(jì)時(shí),但對每個(gè)時(shí)辰分幾刻,有變遷,主要有十二時(shí)辰分百二十刻和分為一百刻兩種。古代長期使用的是百刻制。明末西方天文學(xué)傳入,到清朝確定每日九十六刻,每刻十五分鐘,開始與世界通行時(shí)間接軌。
各分刻法對計(jì)時(shí)沒什么差別,就是計(jì)數(shù)而已。
唐以前一個(gè)時(shí)辰分十刻或八刻,唐以后明確為八刻,每時(shí)辰前四刻為初,后四刻為正,如辰初一刻( 07:15 ),辰正二刻 ( 08:30 )。時(shí)辰開始不滿一刻為初,如申初初刻 ( 15:05 ) 。
作為民間計(jì)時(shí)幾時(shí)幾刻就行了,不需很精確。然對于天文地理大事,就需精確表達(dá)時(shí)間。對于歷史研究和考古研究需了解此情況。
還有一較精確的分法,將一刻分為三,每份等于現(xiàn)在的5分鐘,稱為”字”,不滿字為余。我就依此設(shè)計(jì)換算方法。不需要的可略去。
示例如下:

另外需要了解時(shí)辰是各地時(shí)間,對北京時(shí)有緯度差。
調(diào)整的公式是: 時(shí)辰起點(diǎn)+4*(Z-B) 分鐘( Z是北京中央經(jīng)度,B是當(dāng)?shù)氐慕?jīng)度。)
如:天水時(shí)辰 =23點(diǎn) +4*(120-105.7)分。
得:23 +4 * 14.3 = 23+57.2 =23點(diǎn)57分12秒。
以北京時(shí)間來換算,北京是東經(jīng)120度,當(dāng)?shù)亟?jīng)度是105.7度。
此公式用于地方時(shí)辰調(diào)整。
以下是算法測試的源碼文檔(供參考):
thansform ( ){ //古時(shí)時(shí)辰計(jì)時(shí)換算 int tim[3] ;
string hhs,kks,ffs,ccs ; //預(yù)置字串
string hh0s, mm0s ;
string chh, hhk, hhf, wwf, mcs ; //時(shí)刻分,名稱
string hhcz ; //子時(shí)初,正
string s1,s2,s3,s4;
ccs="雞鳴平旦日出食時(shí)隅中日中日昳晡時(shí)日入黃昏人定夜半" ;
hhs= "丑寅卯辰巳午未申酉戌亥子" ;
kks= "初刻一刻二刻三刻" ;
ffs= "一字二字三字四" ;
setDisplay (0);
clearOutput ( ) ;
print "古時(shí)計(jì)時(shí)時(shí)辰換算示例:" ;
getTime(tim); //getDate = today
pickTime("輸入時(shí)間:", tim); //input rime
hh0=tim[0] ;
mm0=tim[1] ;
print " " ;
chh=subString (hhs, (hh0+1)/2-1, 1) ;
if (hh0-hh0/2*2==0) { hhcz="正" ; }
else{ hhcz="初" ; }
chh=chh+hhcz ; //時(shí)
hhk=subString (kks, mm0/15*2, 2 ) ; //刻
n=(mm0-mm0/15*15)/5 ; //余數(shù)
// hhf=subString (ffs, (n-1)*2, 2) ; //分=字
// if (n==0) hhf=" " ;
// ns=mm0-mm0/15*15-n*5 ; //余=分減刻減字
//wwf=subString (ffs, (ns-1)*2, 1) ;
//21 : 43 =>> 亥初二刻二字三
// for (i=0; i<12 ; i++) { //測試古時(shí)稱謂
// s3=subString (hhs, i, 1 ) ;
// s2= s2+s3+" " ; }
//print s2 ; // test print ccs$
//print ccs ;
hh0s=intToString (hh0) ;
mm0s=intToString (mm0) ;
if (mm0<10) mm0s="0"+mm0s ;
if (mm0==0) hhk=" " ;
mcs=subString (ccs, (hh0+1)/2*2-2, 2) ; //名稱
print "Input Time = " +hh0s+" : "+ mm0s ;
print " " ;
print "換算為古時(shí)計(jì)時(shí):" ;
print " " ;
print " " + chh+hhk+hhf+wwf+" "+mcs ;
print "---------------------------------------------------" ;
//時(shí)辰計(jì)時(shí)轉(zhuǎn)換為時(shí)鐘時(shí)間
int ns, ns1 ;
s1=chh+hhk ; //輸入時(shí),分
s2=subString (s1, 0, 1) ;
for (i=0; i<12 ; i++) {
s3=subString (hhs, i, 1 ) ;
if(s3==s2) ns=i ; }
print " " ;
print "Input : "+s1 ;
hh0=ns*2+1 ; //計(jì)算小時(shí)數(shù)
s2=subString (s1, 1, 1) ;
if (s2=="初") { ns=0 ; }else{ ns=1 ; }
hh0=hh0+ns ; //正加一小時(shí)
s2=subString (s1, 2, 1) ;
if (s2=="一") ns1=15 ; //還原幾刻的分鐘數(shù)
if (s2=="二") ns1=30 ;
if (s2=="三") ns1=45 ;
n=(mm0-mm0/15*15) ; //原輸入分的尾數(shù)
mm0=ns1+n ; //計(jì)算分鐘數(shù)
hh0s=intToString (hh0) ; //format
if (hh0<10) hh0s="0"+hh0s ;
mm0s=intToString (mm0) ;
if (mm0<10) mm0s="0"+mm0s ;
print " " ;
print "換算為現(xiàn)在時(shí)間: ", hh0s, " : ", mm0s ;
}//時(shí)辰換算 到此這篇關(guān)于C語言實(shí)現(xiàn)古代時(shí)辰計(jì)時(shí)與現(xiàn)代時(shí)間換算的文章就介紹到這了,更多相關(guān)C語言時(shí)辰計(jì)時(shí)與現(xiàn)代時(shí)間換算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++調(diào)用EasyX庫實(shí)現(xiàn)嫦娥奔月小游戲
這篇文章主要為大家詳細(xì)介紹了C++如何調(diào)用EasyX庫編寫一個(gè)簡單的嫦娥奔月小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-09-09
C++實(shí)現(xiàn)String類實(shí)例代碼
這篇文章主要介紹了C++實(shí)現(xiàn)String類實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04
C++中String的語法及常用接口的底層實(shí)現(xiàn)詳解
在C語言中,string是一個(gè)標(biāo)準(zhǔn)庫類(class),用于處理字符串,它提供了一種更高級(jí)、更便捷的字符串操作方式,string 類提供了一系列成員函數(shù)和重載運(yùn)算符,以便于對字符串進(jìn)行操作和處理,本編文章會(huì)對C++中的 string 進(jìn)行詳解,希望本篇文章會(huì)對你有所幫助2023-06-06
關(guān)于C++中菱形繼承和虛繼承的問題總結(jié)
C++的三大特性為:封裝,繼承,多態(tài)。但是在繼承中,存在一些使用方面的問題需要注意,下面這篇文章主要給大家總結(jié)介紹了關(guān)于C++中菱形繼承和虛繼承的問題,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
C語言關(guān)鍵字auto與register的深入理解
本篇文章是對c語言關(guān)鍵字auto與register的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

