好好锻炼 发表于 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) ???

原字符串是什么样的?发来看看!
想要得到什么样的结果也请说明下。

user3000 发表于 2012-4-16 15:56:21

本帖最后由 user3000 于 2012-4-16 16:02 编辑

回复 1# 好好锻炼

修改下, 如果只是转换成纯数字, 用 $Date3 = StringRegExpReplace(GUICtrlRead($Date1), '\D', '')
注意, 月份和日期有可能是一位数字, 而不是总是两位!

haijie1223 发表于 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 http://www.autoitx.com/images/common/back.gif


\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

user3000 发表于 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+效率会更高,所以我记住了。

user3000 发表于 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'

试试呢?

user3000 发表于 2012-4-16 17:35:23

回复 14# 水木子

呵呵,这就不用测试了, 我看着都知道, 肯定是 \D+ 快
8楼代码只是针对 'yyyy年MM月dd日' 这类数字间只有一非数字字符的情况!
页: [1] 2
查看完整版本: 关于日期的问题