📄 kformatdatetime.asm
字号:
;格式化时间
;作者 狂编
;lpFormatkIN格式化,同wsprintf,但变量只可用如下
;%Y 年 4位数字
;%y 年
;%m 月
;%d 日
;%H 小时
;%M 分钟
;%S 秒
;除了%Y外,其它的六个都是2位数字,不够长的用0在前面补足
;lpSysTime 一个SYSTEMTIME 结构指针,如果为NULL,则函数自动取当前的时间
.data?
szBuf db 100 dup(?)
.data
szTimeFormat db "当前时间:%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
;示例,显示当前日期
;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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -