⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kformatdatetime.asm

📁 驾驶员考试系统,汇编编写,qq332779423
💻 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 + -