明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 788|回复: 2

[资源] 回复 日期格式的转换

[复制链接]
发表于 2022-2-15 21:48 | 显示全部楼层 |阅读模式
本帖最后由 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 转为月份的格式是 '八月' 字样。其他没有啥特殊参数。
下面将程序来源和注释如下:

  1. ;;Lisp 调用 API 转换时间格式
  2. ;;API 函数参考
  3. ;;https://docs.microsoft.com/en-us ... s/embedded/ms919294(v=msdn.10)
  4. (vl-load-com)

  5. (defun c:cvdate ()
  6.   ;; 创建 DWX 对象,并注册日期和时间转换的 API 函数
  7.   (setq DWX (vlax-create-object "DynamicWrapperX"))
  8.   (vlax-invoke DWX 'Register "kernel32" "GetDateFormat" "i=uupspu" "r=l")
  9.   (vlax-invoke DWX 'Register "kernel32" "GetTimeFormat" "i=uupspu" "r=l")
  10.   (setq curtime (vlax-invoke DWX 'MemAlloc 16 1) ;;分配内存,保存时间参数
  11.         fdate   "MMM','dd ddd yyyy" ;;格式化日期字符串
  12.         ftime   "hh:mm:ss" ;;格式化时间字符串
  13.         dInfo   (vlax-invoke DWX 'MemAlloc 64 1) ;; 分配内存接收转换后的日期字符串
  14.         tInfo   (vlax-invoke DWX 'MemAlloc 64 1) ;; 分配内存接收转换后的时间字符串
  15.         temp    (vlax-invoke DWX 'NumPut 2022 curtime "t") ;;这里是年份
  16.         temp    (vlax-invoke DWX 'NumPut 2 temp "t") ;;月份
  17.          ;;下面要输入星期几,但是不好计算,可以随便输入一个,函数将自动修正为正确值
  18.         temp    (vlax-invoke DWX 'NumPut 1 temp "t")
  19.         temp    (vlax-invoke DWX 'NumPut 15 temp "t") ;;日期
  20.         temp    (vlax-invoke DWX 'NumPut 21 temp "t") ;;小时
  21.         temp    (vlax-invoke DWX 'NumPut 27 temp "t") ;;分钟
  22.         temp    (vlax-invoke DWX 'NumPut 53 temp "t") ;;秒
  23.   )
  24.   ;; 以下参数 1033 是英文月份,如需中文设置为 0
  25.   (vlax-invoke DWX 'GetDateFormat 1033 0 curtime fdate dInfo 64)
  26.   ;; 以下参数 8 的意思是 24 小时制,改为 0 则为 12 小时制
  27.   (vlax-invoke DWX 'GetTimeFormat 0 8 curtime ftime tInfo 64)
  28.   (setq fd (vlax-invoke DWX 'StrGet dInfo "s")
  29.         ft (vlax-invoke DWX 'StrGet tInfo "s")
  30.         dt (strcat fd " " ft)
  31.   )
  32.   (princ dt)
  33.   (princ)
  34. )

  35. ; 日期格式化
  36. ; d     以数字表示的月份中的日期,对于个位数的日期没有前导零。
  37. ; dd    以数字表示的月份中的日期,对于个位数的日期,前导零。
  38. ; ddd   星期几作为三个字母的缩写。
  39. ; dddd  星期的全称。
  40. ; M     月份为数字,单位数月份没有前导零。
  41. ; MM    对于个位数月份,月份为前导零的数字。
  42. ; MMM   月份作为三个字母的缩写。
  43. ; MMMM  月份作为它的全名。
  44. ; y     年份作为最后两位数,小于 10 的年份以零开头。格式与“yy”相同。
  45. ; yy    年份作为最后两位数,小于 10 的年份以零开头。
  46. ; yyyy  用完整的四位数字表示的年份。
  47. ; gg    时期/时代字符串。
  48. ; 区域码查询地址:
  49. ; https://docs.microsoft.com/en-us ... s/embedded/ms921461(v=msdn.10)
  50. ; 0x0409 = 1033





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2022-2-15 22:02 | 显示全部楼层
明经论坛会自动修改帖子里的网站链接,源码注释中有函数说明链接,可下载查看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-6 17:37 | 显示全部楼层
做个记号备用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 12:53 , Processed in 1.189341 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表