回复 日期格式的转换
本帖最后由 yxp 于 2022-2-15 21:49 编辑关于 wgij007 发帖日期格式转换,我记得看过一个 API 函数,流氓兔回帖我又查了一下函数,发现用 API 是比较简单的。
微软 MSDN 上查询日期格式注释如下:; d 以数字表示的月份中的日期,对于个位数的日期没有前导零。
; dd 以数字表示的月份中的日期,对于个位数的日期,前导零。
; ddd 星期几作为三个字母的缩写。
; dddd星期的全称。
; M 月份为数字,单位数月份没有前导零。
; MM 对于个位数月份,月份为前导零的数字。
; MMM 月份作为三个字母的缩写。
; MMMM月份作为它的全名。
; y 年份作为最后两位数,小于 10 的年份以零开头。格式与“yy”相同。
; yy 年份作为最后两位数,小于 10 的年份以零开头。
; yyyy用完整的四位数字表示的年份。
; gg 时期/时代字符串。
GetDateFormat 函数的第一个参数是区域码,在 https://docs.microsoft.com/en-us ... s/embedded/ms921461(v=msdn.10) 上查到,美国编码是0x0409, 转换为十进制是 1033。不用区域码直接用 0 响应是系统默认区域,中文系统 MMMM 转为月份的格式是 '八月' 字样。其他没有啥特殊参数。
下面将程序来源和注释如下:
;;Lisp 调用 API 转换时间格式
;;API 函数参考
;;https://docs.microsoft.com/en-us ... s/embedded/ms919294(v=msdn.10)
(vl-load-com)
(defun c:cvdate ()
;; 创建 DWX 对象,并注册日期和时间转换的 API 函数
(setq DWX (vlax-create-object "DynamicWrapperX"))
(vlax-invoke DWX 'Register "kernel32" "GetDateFormat" "i=uupspu" "r=l")
(vlax-invoke DWX 'Register "kernel32" "GetTimeFormat" "i=uupspu" "r=l")
(setq curtime (vlax-invoke DWX 'MemAlloc 16 1) ;;分配内存,保存时间参数
fdate "MMM','dd ddd yyyy" ;;格式化日期字符串
ftime "hh:mm:ss" ;;格式化时间字符串
dInfo (vlax-invoke DWX 'MemAlloc 64 1) ;; 分配内存接收转换后的日期字符串
tInfo (vlax-invoke DWX 'MemAlloc 64 1) ;; 分配内存接收转换后的时间字符串
temp (vlax-invoke DWX 'NumPut 2022 curtime "t") ;;这里是年份
temp (vlax-invoke DWX 'NumPut 2 temp "t") ;;月份
;;下面要输入星期几,但是不好计算,可以随便输入一个,函数将自动修正为正确值
temp (vlax-invoke DWX 'NumPut 1 temp "t")
temp (vlax-invoke DWX 'NumPut 15 temp "t") ;;日期
temp (vlax-invoke DWX 'NumPut 21 temp "t") ;;小时
temp (vlax-invoke DWX 'NumPut 27 temp "t") ;;分钟
temp (vlax-invoke DWX 'NumPut 53 temp "t") ;;秒
)
;; 以下参数 1033 是英文月份,如需中文设置为 0
(vlax-invoke DWX 'GetDateFormat 1033 0 curtime fdate dInfo 64)
;; 以下参数 8 的意思是 24 小时制,改为 0 则为 12 小时制
(vlax-invoke DWX 'GetTimeFormat 0 8 curtime ftime tInfo 64)
(setq fd (vlax-invoke DWX 'StrGet dInfo "s")
ft (vlax-invoke DWX 'StrGet tInfo "s")
dt (strcat fd " " ft)
)
(princ dt)
(princ)
)
; 日期格式化
; d 以数字表示的月份中的日期,对于个位数的日期没有前导零。
; dd 以数字表示的月份中的日期,对于个位数的日期,前导零。
; ddd 星期几作为三个字母的缩写。
; dddd星期的全称。
; M 月份为数字,单位数月份没有前导零。
; MM 对于个位数月份,月份为前导零的数字。
; MMM 月份作为三个字母的缩写。
; MMMM月份作为它的全名。
; y 年份作为最后两位数,小于 10 的年份以零开头。格式与“yy”相同。
; yy 年份作为最后两位数,小于 10 的年份以零开头。
; yyyy用完整的四位数字表示的年份。
; gg 时期/时代字符串。
; 区域码查询地址:
; https://docs.microsoft.com/en-us ... s/embedded/ms921461(v=msdn.10)
; 0x0409 = 1033
明经论坛会自动修改帖子里的网站链接,源码注释中有函数说明链接,可下载查看
做个记号备用
页:
[1]