[已解决]关于时间格式的问题
本帖最后由 fuinei 于 2012-10-20 14:31 编辑各位好,请问AU3有没有函数可以把12小时制的时间转换为24小时制的时间呢?如1:30PM,转换为13:30 本帖最后由 user3000 于 2012-10-15 19:20 编辑
自己稍稍处理一下就有了. 可以说是普通字符串处理而已. 当然用正则就简洁一点, 比如:$t = '1:30PM'
If StringInStr($t, 'PM') Then MsgBox(0, '',(StringRegExpReplace($t, ':.+$', '') + 12 ) & StringRegExpReplace($t, '^\d+|[^:\d]', '')) 本帖最后由 netegg 于 2012-10-15 21:40 编辑
stringleft($time, stringinstr($time, ':') - 1) + BitAND(stringinstr($time, 'm'), 1)*12 & Stringmid($time, stringinstr($time, ':'),stringinstr($time, ':')+1)
尽管有些胡闹 回复 2# user3000
12小时制-->24进制,这个正则不对 回复 4# netegg
是的,最早发的没去掉'PM'两字母,刚发出来就发现了. 老大是指这个否? 本帖最后由 netegg 于 2012-10-15 19:42 编辑
回复 5# user3000
或者不应该说不对,是后面那个+12还要处理下
你试试看,1:20am或者1:20 回复 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 本帖最后由 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
$Minute = $Time_ex
$Second = StringSplit($Time_ex," ")
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兄能否帮忙改改你的代码呢? 本帖最后由 netegg 于 2012-10-16 13:14 编辑
Func Convert24h($time, $format)
If $format = "am" Then Return Mod($time, 12)
Return Mod($time + 12, 24)
EndFunc
回复 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
$minute = $time_ex
$second = $time_ex
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)
对字符的处理应该还是使用正则最为简洁 本帖最后由 netegg 于 2012-10-16 16:21 编辑
回复 10# fuinei
$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
好像反了,自己再试试吧 另外,现成的函数也有,不过不比这样简单,相对来说可能更麻烦,_winapi_gettimeformat 回复 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
看来最简单的方式还是正则,请问各位有没有比较好学习正则的文章,论坛上很多学习正则的附件下载后都打不开的。 有12:XX:XX AM这个时间吗 本帖最后由 netegg 于 2012-10-16 19:15 编辑
0:00:00~11:59:59对应的是12小时制的am
12:00:00~23:59:59对应的是12小时制的pm
还有这里面的正则不是用于替换数字,是为了删除后面的字符,和时制变换无关
页:
[1]
2