本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別涉及一種解析mysql數(shù)據(jù)庫時間格式的方法。
背景技術(shù):
mysql是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典mysqlab公司開發(fā),目前屬于oracle旗下產(chǎn)品。mysql最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在web應(yīng)用方面mysql是最好的rdbms(relationaldatabasemanagementsystem,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。
mysql是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
mysql所使用的sql語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。mysql軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇mysql作為網(wǎng)站數(shù)據(jù)庫。
目前在恢復(fù)mysql數(shù)據(jù)時出現(xiàn)恢復(fù)出的時間為亂碼或錯誤的情況。
技術(shù)實現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)的不足,提供了一種解析mysql數(shù)據(jù)庫時間格式的方法。
為解決以上問題,本發(fā)明采用的技術(shù)方案如下:
一種解析mysql數(shù)據(jù)庫時間格式的方法,包括以下步驟:
s1:找到日期的底層數(shù)據(jù)的5字節(jié);
s2:轉(zhuǎn)變?yōu)槎M(jìn)制數(shù);
s3:分割為6組數(shù),6組的位數(shù)分別為14位、4位、5位、5位、6位、6位,分別對應(yīng)年、月、日、小時、分鐘、秒數(shù);
s4:將上述位數(shù)轉(zhuǎn)換為十進(jìn)制,得到日、小時、分鐘、秒數(shù)的正確時間,并將得到的年對應(yīng)的數(shù)設(shè)為y,將月對應(yīng)的數(shù)設(shè)為m;
s5:設(shè)當(dāng)年為基年,y-基年=基數(shù);
s6:執(zhí)行公式:y-基數(shù)=n;
s7:判斷n是否大于基年,并記錄判斷結(jié)果;
s8:執(zhí)行公式得到月份域:1+(基年-n)*3=n1;12+(基年-n)*3=n12;及月份域是n1至n12的12個數(shù);
s9:判斷m是否為n1至n12之間的任意數(shù)值,若是則取m在月份域中的位數(shù)為月份,n為年份的正確時間,結(jié)束;若不是則執(zhí)行s10;
s10:判斷s7的結(jié)果,若n小于2016則執(zhí)行s11;若n大于2016則執(zhí)行s12;
s11:執(zhí)行公式m+16=m;n-1=n;返回執(zhí)行s8;
s12:執(zhí)行公式m-16=m;n+1=n;返回執(zhí)行s8。
本發(fā)明的有益效果如下:通過公式完整高效的對mysql數(shù)據(jù)庫時間格式進(jìn)行解析,不會解析錯誤。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下參照實施例,對本發(fā)明做進(jìn)一步詳細(xì)說明。
一種解析mysql數(shù)據(jù)庫時間格式的方法,包括以下步驟:
s1:找到日期的底層數(shù)據(jù)的5字節(jié);
s2:轉(zhuǎn)變?yōu)槎M(jìn)制數(shù);
s3:分割為6組數(shù),6組的位數(shù)分別為14位、4位、5位、5位、6位、6位,分別對應(yīng)年、月、日、小時、分鐘、秒數(shù);
s4:將上述位數(shù)轉(zhuǎn)換為十進(jìn)制,得到日、小時、分鐘、秒數(shù)的正確時間,并將得到的年對應(yīng)的數(shù)設(shè)為y,將月對應(yīng)的數(shù)設(shè)為m;
s5:設(shè)當(dāng)年為基年,y-基年=基數(shù);
s6:執(zhí)行公式:y-基數(shù)=n;
s7:判斷n是否大于基年,并記錄判斷結(jié)果;
s8:執(zhí)行公式得到月份域:1+(基年-n)*3=n1;12+(基年-n)*3=n12;及月份域是n1至n12的12個數(shù);
s9:判斷m是否為n1至n12之間的任意數(shù)值,若是則取m在月份域中的位數(shù)為月份,n為年份的正確時間,結(jié)束;若不是則執(zhí)行s10;
s10:判斷s7的結(jié)果,若n小于2016則執(zhí)行s11;若n大于2016則執(zhí)行s12;
s11:執(zhí)行公式m+16=m;n-1=n;返回執(zhí)行s8;
s12:執(zhí)行公式m-16=m;n+1=n;返回執(zhí)行s8。
為了更好的理解分發(fā)明,下面舉例說明;
實施例一:提取的日期底層數(shù)據(jù)為“999842daa1”;其轉(zhuǎn)換為2進(jìn)制1001100110011000010000101101101010100001;轉(zhuǎn)換為10進(jìn)制,秒100001=33,分101010=42,時01101=13,日00001=1,月0001=1,年10011001100110=9830;
設(shè)基年為2016年,9830-2016=7814,7814為基數(shù);
年份的數(shù)據(jù)為9830-7814=2016,執(zhí)行公式,1+(2016-2016)*3=1;12+(2016-2016)*3=12;月份為1在1至12的月份域內(nèi),因此確定時間為2016年1月1日13時42分33秒。
實施例二:提取的日期底層數(shù)據(jù)為“999ba7011c”;轉(zhuǎn)換為2進(jìn)制為1001100110001000000000101101101010001101;轉(zhuǎn)換為10進(jìn)制年=9826,月=0,日=1,時=13,分=42,秒=13;
同樣設(shè)基年為2016年,9830-2016=7814,7814為基數(shù);
9826-7814=2012,執(zhí)行公式1+(2016-2012)*3=13;12+(2016-2012)*3=24;
月份0不在12至24之間,因此執(zhí)行0+16=16;2012-1=2011;
執(zhí)行1+(2016-2011)*3=16;12+(2016-2011)*3=27;
月份16在月份域16值27的第一位,第一位表示1月,因此月份為1月;
確定時間為2011年1月1日13時42分13秒。
實施例三:提取的日期底層數(shù)據(jù)為“999ee70d2507”;轉(zhuǎn)換為2進(jìn)制為1001100110011110111001110000110100100101;轉(zhuǎn)換為10進(jìn)制年=9831,月=11,日=19,時=16,分=52,秒=37;
同樣設(shè)基年為2016年,9830-2016=7814,7814為基數(shù);
9831-7814=2017,執(zhí)行公式1+(2016-2017)*3=-2;12+(2016-2017)*3=10;
月份11不在-2至10之間,因此執(zhí)行11-16=-5;2017+1=2018;
執(zhí)行1+(2016-2018)*3=-5;12+(2016-2018)*3=6;
月份-5在月份域-5值6的第一位,第一位表示1月,因此月份為1月;
確定時間為2018年1月19日16時52分37秒。
本領(lǐng)域的普通技術(shù)人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應(yīng)被理解為本發(fā)明的保護(hù)范圍并不局限于這樣的特別陳述和實施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護(hù)范圍內(nèi)。