關於VB日期與數字的轉換(一)

2021-08-29 03:34:40 字數 1187 閱讀 9861

vb中可將日期作為實數的一部分來儲存。小數點左邊的數值表示日期:小數點右邊的數值表示時間。負的數值表示在1899 年 12 月 30 日 之前。所以每一天可以用乙個整數來表示(以1899-12-30 為0,該日之後為正數,之前為負數) ,對於msvb 的合法日期,即#100-1-1# 到#9999-12-31#,就有-657434~2958465來表示。

對於給定的日期,用clng()可以獲得該日期的整數,反過來,用cdate()可以將-657434~2958465範圍內的任意整數轉換為相應的日期,但問題是,它是如何轉換過來的?

公曆就是一種陽曆,平年365天,閏年366天,每四年一閏,每滿百年少閏一次,到第四百年再閏,即每四百年中有97個閏年。公曆的歷年平均長度(365.25日)與回歸年(365.242189日)只有26秒之差,要累積2023年才差一日。

下面就年份的轉換作一分析:

function myyear(byval datenum as long) as integer

datenum = datenum + 693960 ' #0001-1-1#--->#1899-12-30#之間的天數

datenum = datenum + int(datenum / 36525) - int(datenum / 146100) - 1'對閏年所產生的多出來的天數進行修正。

myyear = int(datenum / 365.25)

end function

'簡化函式

function myyear2(byval datenum as long) as integer

myyear2 = 1900 + int((datenum + int((datenum - 15) / 36525) - int((datenum - 15) / 146100 + 1.75)) / 365.25)

end function

測試:private sub command1_click()

dim i as long

for i = clng(#1/1/100#) to clng(#12/31/9999#)

if not year(cdate(i)) = myyear2(i) then debug.print i

next

msgbox "ok"

end sub

所有日期計算都正確。

注: 以上**完全自創,但說實話,覺得自己也是吃飽撐的沒事幹。

關於日期 數字的格式轉換

oracle to char 把日期或數字轉換為字串 to char number,格式 to char salary,99,999.99 to char date,格式 to date 把字串轉換為資料庫中的日期型別 to date char,格式 to number 將字串轉換為數字 to nu...

日期的轉換與比較

前不久需要實現這樣乙個小功能,在啟動程式時檢查資料庫裡的日誌是否有超過指定時間 比如說90天 的,如果有則刪除這之前的日誌。該日誌是自己在使用軟體時記錄的一些操作。當時的想法就是獲取現在的日期,獲取資料庫裡日誌的日期。然而資料庫裡的日期卻是用字串儲存的,所以需要進行一些轉換。有好幾種轉換,下面就一一...

mysql關於日期 關於mysql日期的一些例子

mysql中的月份計算 減少乙個月,比如 原來的subtime 2006 10 22 12 22 22 減少後變成 2006 9 22 12 22 22 update message set subtime date sub subtime,interval 1 month 增加乙個月 update...