You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows命令提示符:指定格式时间戳获取与时间差计算问询

在Windows命令提示符中处理dd-mm-yyyy hh:mm:ss格式的日期时间

没问题,我来帮你搞定Windows命令提示符里的日期时间处理需求:


1. 创建变量并存储dd-mm-yyyy hh:mm:ss格式的日期时间

Windows CMD原生的%date%和%time%变量格式会随系统区域设置变化,所以推荐用更可靠的方式生成固定格式的时间:

方法1:使用PowerShell(简洁且无需额外处理)

PowerShell的日期格式化非常直接,CMD中可以直接调用它来生成目标格式并存储到变量:

@echo off
:: 生成并存储dd-mm-yyyy hh:mm:ss格式的时间到datetime变量
for /f "delims=" %%a in ('powershell -Command "(Get-Date).ToString('dd-MM-yyyy HH:mm:ss')"') do set "datetime=%%a"
:: 验证结果
echo 当前时间:%datetime%

这个方法会自动为个位数的日、月、时、分、秒补前导零,完美符合格式要求,适用于Windows 7及以上系统(默认自带PowerShell)。

方法2:使用WMIC(纯CMD环境,需处理前导零)

如果你的环境无法使用PowerShell,可以用WMIC获取系统时间的各个字段,再拼接成目标格式,同时手动补前导零:

@echo off
setlocal enabledelayedexpansion
:: 通过WMIC获取日、月、年、时、分、秒字段
for /f "skip=1 tokens=1-6 delims= " %%a in ('wmic path win32_localtime get day^,month^,year^,hour^,minute^,second') do (
    if not "%%f"=="" (
        :: 为个位数的字段补前导零
        set "day=%%a" && if !day! lss 10 set "day=0!day!"
        set "month=%%b" && if !month! lss 10 set "month=0!month!"
        set "hour=%%d" && if !hour! lss 10 set "hour=0!hour!"
        set "minute=%%e" && if !minute! lss 10 set "minute=0!minute!"
        set "second=%%f" && if !second! lss 10 set "second=0!second!"
        :: 拼接成目标格式
        set "datetime=!day!-!month!-%%c !hour!:!minute!:!second!"
    )
)
:: 验证结果
echo 当前时间:%datetime%
endlocal

2. 计算两个dd-mm-yyyy hh:mm:ss格式日期时间的差值

CMD本身对日期时间计算支持有限,最可靠的方式还是借助PowerShell来解析时间字符串并计算差值:

示例:计算两个时间的差

假设你已经有了start_time和end_time两个变量,格式都是dd-mm-yyyy hh:mm:ss,可以这样计算:

@echo off
set "start_time=05-10-2024 10:30:00"
set "end_time=05-10-2024 14:45:30"

:: 调用PowerShell计算时间差,输出格式为"小时:分钟:秒"
for /f "delims=" %%a in ('powershell -Command "$start = [DateTime]::ParseExact('%start_time%', 'dd-MM-yyyy HH:mm:ss', $null); $end = [DateTime]::ParseExact('%end_time%', 'dd-MM-yyyy HH:mm:ss', $null); ($end - $start).ToString('hh\:mm\:ss')"') do set "time_diff=%%a"

echo 时间差:%time_diff%

如果需要输出总小时数、总分钟数或者更详细的差值信息,可以修改PowerShell的输出逻辑:

:: 输出总小时数、剩余分钟数、剩余秒数
for /f "delims=" %%a in ('powershell -Command "$start = [DateTime]::ParseExact('%start_time%', 'dd-MM-yyyy HH:mm:ss', $null); $end = [DateTime]::ParseExact('%end_time%', 'dd-MM-yyyy HH:mm:ss', $null); $diff = $end - $start; Write-Host '总时长:'$diff.TotalHours'小时,'$diff.Minutes'分钟,'$diff.Seconds'秒'"') do set "time_diff=%%a"
echo %time_diff%

注意: 如果必须在纯CMD环境下计算(不依赖PowerShell),需要手动将日期时间转换为总秒数再做减法,这个过程需要处理闰年、月份天数等复杂逻辑,容易出错,因此不推荐这种方式。


内容的提问来源于stack exchange,提问作者nikhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:12:26