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

[AU3基础] [已解决]关于时间格式的问题

 火.. [复制链接]
发表于 2012-10-15 18:30:00 | 显示全部楼层 |阅读模式
本帖最后由 fuinei 于 2012-10-20 14:31 编辑

各位好,请问AU3有没有函数可以把12小时制的时间转换为24小时制的时间呢?如1:30PM,转换为13:30
发表于 2012-10-15 19:17:54 | 显示全部楼层
本帖最后由 user3000 于 2012-10-15 19:20 编辑

自己稍稍处理一下就有了. 可以说是普通字符串处理而已. 当然用正则就简洁一点, 比如:
$t = '1:30PM'
If StringInStr($t, 'PM') Then MsgBox(0, '',(StringRegExpReplace($t, ':.+$', '') + 12 ) & StringRegExpReplace($t, '^\d+|[^:\d]', ''))
发表于 2012-10-15 19:20:13 | 显示全部楼层
本帖最后由 netegg 于 2012-10-15 21:40 编辑

[au3]stringleft($time, stringinstr($time, ':') - 1) + BitAND(stringinstr($time, 'm'), 1)*12 & Stringmid($time, stringinstr($time, ':'),  stringinstr($time, ':')+1)[/au3]
尽管有些胡闹
发表于 2012-10-15 19:28:46 | 显示全部楼层
回复 2# user3000
12小时制-->24进制,这个正则不对
发表于 2012-10-15 19:31:29 | 显示全部楼层
回复 4# netegg


   是的,最早发的没去掉'PM'两字母,刚发出来就发现了. 老大是指这个否?
发表于 2012-10-15 19:33:55 | 显示全部楼层
本帖最后由 netegg 于 2012-10-15 19:42 编辑

回复 5# user3000
或者不应该说不对,是后面那个+12还要处理下
你试试看,1:20am或者1:20
发表于 2012-10-15 21:17:33 | 显示全部楼层
回复 6# netegg

哦, 是没考虑不用+12的情况.
那就要加多判断语句了.
$t = '1:30AM'
If StringInStr($t, 'PM') Then 
MsgBox(0, '',(StringRegExpReplace($t, ':.+$', '') + 12 ) & StringRegExpReplace($t, '^\d+|[^:\d]', ''))
Else
        MsgBox(0, '', StringRegExpReplace($t, '[[:alpha:]]', ''))
EndIf
 楼主| 发表于 2012-10-16 11:38:04 | 显示全部楼层
本帖最后由 fuinei 于 2012-10-16 11:39 编辑

我的原意是想了解AU3有没有现成的函数或UDF可实现该功能,没想到user3000兄的netegg元谷已给出函数,谢谢两位!
我的基础不好,正则还看不太懂,使用user3000兄的代码测试仍存在点问题,如12:59:00 AM 24小时制应该是00:59:00,而12:59:00 PM应该是12:59:00,我使用字符串转换的测试代码如下:
Local $Time_ex 
$Time = '12:30:05 PM'
$Time_ex = StringSplit($Time,":")
$Hour = $Time_ex[1]
$Minute = $Time_ex[2]
$Second = StringSplit($Time_ex[3]," ")[1]

Select 
        Case StringInStr($Time,"12") And StringInStr($Time,"AM")
                $Time = "00:" & $Minute & ":" & $Second
        Case StringInStr($Time,"12") And StringInStr($Time,"PM")
                $Time = $Hour & ":" & $Minute & ":" & $Second
        Case StringInStr($Time,"AM")
                $Time = $Hour & ":" & $Minute & ":" & $Second
        Case StringInStr($Time,"PM")
                $Time = $Hour + 12 & ":" & $Minute & ":" & $Second
EndSelect
MsgBox("","",$Time)
请问user3000兄能否帮忙改改你的代码呢?
发表于 2012-10-16 13:12:58 | 显示全部楼层
本帖最后由 netegg 于 2012-10-16 13:14 编辑

[au3]
Func Convert24h($time, $format)   
If $format = "am" Then Return Mod($time, 12)     
Return Mod($time + 12, 24)
EndFunc
[/au3]
 楼主| 发表于 2012-10-16 13:49:26 | 显示全部楼层
回复 9# netegg

当时间为12:XX:XX pm 使用该函数返回0,与实际情况不符,按照您的思路增加一些判断也可以实现
$time = '12:58:00 pm'
$format = StringRight($time,2)
$time = StringTrimRight($time,3)
$time_ex = StringSplit($time,":")
$hour = $time_ex[1]
$minute = $time_ex[2]
$second = $time_ex[3]

If $format = "am" Then
        $hour = Mod($hour,12)
ElseIf $format = "pm" And $hour = 12 Then        
        $hour = $hour
Else
        $hour = Mod($hour + 12, 24) 
EndIf

If $hour = 0 Then $hour = "00"
$time = $hour & ":" & $minute & ":" & $second

MsgBox("","",$time)
对字符的处理应该还是使用正则最为简洁
发表于 2012-10-16 14:55:54 | 显示全部楼层
本帖最后由 netegg 于 2012-10-16 16:21 编辑

回复 10# fuinei

[au3]
$time = '12:58:00'

MsgBox("","", StringRegExpReplace(Convert24h($time) & StringTrimLeft($time, StringInStr($time, ':')-1), 'pm|am', ''))


Func Convert24h($time)   
If StringInStr($time, "pm") Then Return Mod($time, 12)  +12   
Return Mod($time, 24)
EndFunc
[/au3]
好像反了,自己再试试吧
发表于 2012-10-16 16:25:35 | 显示全部楼层
另外,现成的函数也有,不过不比这样简单,相对来说可能更麻烦,_winapi_gettimeformat
 楼主| 发表于 2012-10-16 18:24:15 | 显示全部楼层
回复 11# netegg

谢谢netegg元老的指导!是的,代码当时间为12:XX:XX AM是返回的结果不正确,稍做修改可以了
$time = '12:01:00 AM'
 
MsgBox("","", StringRegExpReplace(Convert24h($time) & StringTrimLeft($time, StringInStr($time, ':')-1), 'PM|AM', ''))
 
 
Func Convert24h($time) 
If StringInStr($time, "AM") And StringInStr($time, "12") Then Return("00")
 If StringInStr($time, "PM") Then Return Mod($time, 12)  +12   
 Return Mod($time, 24)
EndFunc
看来最简单的方式还是正则,请问各位有没有比较好学习正则的文章,论坛上很多学习正则的附件下载后都打不开的。
发表于 2012-10-16 19:01:54 | 显示全部楼层
有12:XX:XX AM这个时间吗
发表于 2012-10-16 19:04:19 | 显示全部楼层
本帖最后由 netegg 于 2012-10-16 19:15 编辑

0:00:00~11:59:59对应的是12小时制的am
12:00:00~23:59:59对应的是12小时制的pm
还有这里面的正则不是用于替换数字,是为了删除后面的字符,和时制变换无关
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 21:27 , Processed in 0.110055 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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