求助Microsoft Access 365(64位)特殊军事时间格式转换方案
解决Access中军事时间格式转换问题
方法1:直接在查询中用表达式转换
假设存储原始军事时间的字段名为MilitaryTime,可以用以下SQL表达式直接生成目标格式:
-- 生成00:10:00格式 Format(Left(Right("000000" & [MilitaryTime],6),2) & ":" & Mid(Right("000000" & [MilitaryTime],6),3,2) & ":" & Right(Right("000000" & [MilitaryTime],6),2), "hh:mm:ss") -- 生成24:10:00格式(将午夜00替换为24) Replace(Format(Left(Right("000000" & [MilitaryTime],6),2) & ":" & Mid(Right("000000" & [MilitaryTime],6),3,2) & ":" & Right(Right("000000" & [MilitaryTime],6),2), "hh:mm:ss"), "00:", "24:")
原理:先用Right("000000" & [MilitaryTime],6)把短时间补成6位(比如1000变成001000),再拆分出时、分、秒,最后拼接成带冒号的格式,按需替换午夜的00为24。
方法2:自定义VBA函数(更灵活)
如果需要处理空值、非数字等特殊情况,或者以后要调整规则,写个VBA函数更方便:
- 打开Access的VBA编辑器(按Alt+F11)
- 插入一个新模块,粘贴以下代码:
Function ConvertMilitaryTime(ByVal rawTime As Variant) As String Dim paddedTime As String ' 处理空值或非数字输入 If IsNull(rawTime) Or Not IsNumeric(rawTime) Then ConvertMilitaryTime = "" Exit Function End If ' 补前导零到6位 paddedTime = Right("000000" & CStr(rawTime), 6) ' 拆分时分秒 Dim hours As String, minutes As String, seconds As String hours = Left(paddedTime, 2) minutes = Mid(paddedTime, 3, 2) seconds = Right(paddedTime, 2) ' 可选:将午夜的00替换为24 If hours = "00" Then hours = "24" End If ' 拼接成目标格式 ConvertMilitaryTime = hours & ":" & minutes & ":" & seconds End Function
- 保存模块后,就可以在查询或窗体控件里直接调用:
ConvertMilitaryTime([MilitaryTime])
注意事项
- 如果原始
MilitaryTime是文本类型,去掉VBA里的CStr()转换,直接用rawTime即可。 - 不需要24小时制午夜显示的话,删掉VBA里的
If hours = "00"判断块,或者查询里的Replace函数。
内容的提问来源于stack exchange,提问作者Carlos F
相关产品推荐
相关产品推荐

