?? kformatdatetime.asm
字號:
;格式化時(shí)間
;作者 狂編
;lpFormatkIN格式化,同wsprintf,但變量只可用如下
;%Y 年 4位數(shù)字
;%y 年
;%m 月
;%d 日
;%H 小時(shí)
;%M 分鐘
;%S 秒
;除了%Y外,其它的六個(gè)都是2位數(shù)字,不夠長的用0在前面補(bǔ)足
;lpSysTime 一個(gè)SYSTEMTIME 結(jié)構(gòu)指針,如果為NULL,則函數(shù)自動取當(dāng)前的時(shí)間
.data?
szBuf db 100 dup(?)
.data
szTimeFormat db "當(dāng)前時(shí)間:%Y年%m月%d日 %H:%M:%S",0
.code
kFormatDateTime proc uses esi edi ebx lpBuf_OUT,lpFormat_IN,lpSysTime
local @szBuf[255]:BYTE
local @si:SYSTEMTIME
jmp @f
sz2:
db '%02u',0
sz4:
db '%04u',0
@@:
mov ebx,lpSysTime
assume ebx:ptr SYSTEMTIME
.if ebx==0
lea ebx,@si
invoke GetLocalTime,ebx
.endif
mov esi,lpFormat_IN
mov edi,lpBuf_OUT
push edi
.while TRUE
mov al,[esi]
.if al==0
mov BYTE ptr [edi],0
.break
.endif
mov ah,[esi+1]
.if al=='%'
mov edx,sz2
.if ah=='Y'
movzx eax,[ebx].wYear
mov edx,sz4
.elseif ah=='y'
movzx eax,[ebx].wYear
.elseif ah=='m'
movzx eax,[ebx].wMonth
.elseif ah=='d'
movzx eax,[ebx].wDay
.elseif ah=='H'
movzx eax,[ebx].wHour
.elseif ah=='M'
movzx eax,[ebx].wMinute
.elseif ah=='S'
movzx eax,[ebx].wSecond
.else
jmp @f
.endif
add esi,2
invoke wsprintf,edi,edx,eax
add edi,eax
.else
@@:
movsb
.endif
.endw
pop eax
assume ebx:nothing
ret
kFormatDateTime endp
;示例,顯示當(dāng)前日期
;szBuf db 100 dup(?)
;szFormat db "%Y年%m月%d日 %H:%M:%S",0
;invoke kFormatDateTime,addr szBuf,addr szFormat,NULL
;源文檔見
;http://www.aogosoft.com/bbs/view.asp?id=37728
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -