找回密码
 加入
搜索
查看: 6519|回复: 19

[AU3基础] 关于日期的问题

 火.. [复制链接]
发表于 2012-4-16 15:35:29 | 显示全部楼层 |阅读模式
$sDate3 = StringRegExpReplace(StringStripWS(GUICtrlRead($Date1), 3), '(\d{4}).+(\d{2}).+(\d{2})', '$1$2$3')
                                $Date4= StringRegExpReplace($Date3,"(\d{4})(\d{2})(\d{2})","$1$2$3")
                                MsgBox(0,0,$Date4)
我这样怎么获取的日期是空值呢,本来是要转换成数字型的,但是却是空的。不知道要怎么弄才可以。
发表于 2012-4-16 15:43:42 | 显示全部楼层
本帖最后由 水木子 于 2012-4-16 15:45 编辑

GUICtrlRead($Date1) ???

原字符串是什么样的?发来看看!
想要得到什么样的结果也请说明下。
发表于 2012-4-16 15:56:21 | 显示全部楼层
本帖最后由 user3000 于 2012-4-16 16:02 编辑

回复 1# 好好锻炼

修改下, 如果只是转换成纯数字, 用 $Date3 = StringRegExpReplace(GUICtrlRead($Date1), '\D', '')
注意, 月份和日期有可能是一位数字, 而不是总是两位!
发表于 2012-4-16 16:02:50 | 显示全部楼层
回复 2# 水木子


    同意,没有源字符,很难判断的
发表于 2012-4-16 16:26:22 | 显示全部楼层
本帖最后由 天煞孤心 于 2012-4-16 16:30 编辑
回复  好好锻炼

修改下, 如果只是转换成纯数字, 用 $Date3 = StringRegExpReplace(GUICtrlRead($Date1) ...
user3000 发表于 2012-4-16 15:56



\D+ 更好些!

#Include <GuiDateTimePicker.au3>
GUICreate('', 400, 300)
$Date1 = GUICtrlCreateDate('', 100, 100, 200, 21)
_GUICtrlDTP_SetFormat(GUICtrlGetHandle(-1), 'yyyy年MM月dd日')
GUISetState()

$sDate = GUICtrlRead($Date1)
$iDate = StringRegExpReplace($sDate, '\D+', '')
MsgBox(0, '', $iDate)

Do
Until GUIGetMsg() = -3
发表于 2012-4-16 16:34:36 | 显示全部楼层
回复 5# 天煞孤心

未明白'更好'在哪? 效率更高吗?
$Date3 = StringRegExpReplace(GUICtrlRead($Date1), '\D', '')
只是把读到的 GuiCtrlCreateDate 的日期控件的内容转换成纯数字.
我也只是猜测楼主的意图.
发表于 2012-4-16 16:38:24 | 显示全部楼层
回复 6# user3000
嗯!是的\D+效率会更高。
说到这个,就要提到我们的大神P侠,当初我也是这样想的 \D 和 \D+ 效果是一样的。
不过大神说 \D+效率会更高,所以我记住了。
发表于 2012-4-16 16:54:41 | 显示全部楼层
回复 7# 天煞孤心

刚测试了下, \D+ 在这里使用会慢一些!
测试代码:
$str = '2012年04月16日'
For $i = 1 To 23  ; 24以上, 内存就装不下了!
 $str &= $str
Next
 
 $time = TimerInit()
 $date = StringRegExpReplace($str, '\D+', '')
ConsoleWrite(@CR & '\D+花费时间: ' &  TimerDiff($time) & ' 秒')

$time = TimerInit()
$date = StringRegExpReplace($str, '\D', '')
ConsoleWrite(@CR & '\D花费时间: '&  TimerDiff($time) & ' 秒' & @CR)
我机器的测试结果:
\D+花费时间: 22894.524042641 秒er
\D花费时间: 22368.3747386077 秒
明显前者慢了半秒了!
发表于 2012-4-16 17:12:34 | 显示全部楼层
符合\D规则的字符有两个以上相连的,\D+才能发挥它真正的意义吧!
我是这样想的
 楼主| 发表于 2012-4-16 17:15:45 | 显示全部楼层
回复 2# 水木子


    原字符是2012年04月13日这种日期格式的,我想得到20120413数字格式的,因为日期格式的我这里老是查询不对,得不到自己想要的结果。
 楼主| 发表于 2012-4-16 17:17:56 | 显示全部楼层
回复 4# haijie1223


    我这是从日期控件获取出来的,原字符是2012年04月13日这种日期格式的,我想得到20120413数字格式的,因为日期格式的我这里老是查询不对,得不到自己想要的结果。
 楼主| 发表于 2012-4-16 17:21:36 | 显示全部楼层
回复 3# user3000


    谢谢,你这种方法能得到那种结果,我在测试看看查询上面有没有什么问题。
发表于 2012-4-16 17:23:53 | 显示全部楼层
回复 10# 好好锻炼

5楼不是已经给出了解决方法吗!
发表于 2012-4-16 17:30:09 | 显示全部楼层
回复 8# user3000

$str = 'ABCDEabcde中文测试1234567890'

试试呢?

评分

参与人数 1金钱 +10 贡献 +2 收起 理由
user3000 + 10 + 2 难得受到水大的关注!

查看全部评分

发表于 2012-4-16 17:35:23 | 显示全部楼层
回复 14# 水木子

呵呵,  这就不用测试了, 我看着都知道, 肯定是 \D+ 快
8楼代码只是针对 'yyyy年MM月dd日' 这类数字间只有一非数字字符的情况!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 22:38 , Processed in 0.089032 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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