中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 19:00
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理 将秒转换成日时分秒
楼 主 批处理 将秒转换成日时分秒 发表于 2007-01-16 22:15 ·  美国 弗吉尼亚州 华盛顿县 Microsoft
高级用户
★★
积分 783
发帖 268
注册 2006-12-26 17:18
UID 74627
性别 男
状态 离线
一道C语言题 请用批处理做 例如:

输入(秒):3662

显示: 0天 1 小时 1分钟 2秒
2 发表于 2007-01-16 23:28 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  以下演示代码没有做错误检测,请测试:

@echo off

:begin
cls
set /a D=0,H=0,M=0
set num=
set /p num= 请输入秒数(退出请直接按回车):
if not defined num exit

call :transform D %num% 86400
call :transform H %num% 3600
call :transform M %num% 60

echo %D% 天 %H% 小时 %M% 分 %num% 秒

pause
goto begin

:transform
set /a %1=%2/%3
if %1 gtr 0 set /a num=%2-%3*%1
goto :eof

  精简一下代码。

[ Last edited by namejm on 2007-1-16 at 12:17 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
PPdos +2 2007-01-17 10:27
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2007-01-16 23:40 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
@echo off
:begin
cls
echo.
set input=
set /p input= 请输入秒数(退出请直接按回车):
if not defined input exit
set /a SS=%input%%%60
set /a MM=%input%/60%%60
set /a HH=%input%/3600%%60
set /a DD=%input%/86400%%60
echo.
echo %DD% 天 %HH% 小时 %MM% 分 %SS% 秒
echo.
pause
goto begin
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
PPdos +2 2007-01-17 10:22
4 发表于 2007-01-16 23:48 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  呵呵,zh159 兄的思路更直接啊,我复杂化了。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
5 发表于 2007-01-16 23:50 ·  中国 北京 东城区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
精彩!!!顶~~
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
6 发表于 2007-01-17 00:02 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
一个简单的数学问题啊
呵呵

程序就也要简单
7 发表于 2007-01-17 00:08 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
如果输入的是
xxxxx.34

还要考虑毫秒

那么2楼和3楼的代码就是不能执行的

[ Last edited by scriptor on 2007-1-16 at 11:09 AM ]
8 发表于 2007-01-17 00:56 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  3楼的代码计算天数的时候,再除以60来取余数会出问题的,应该去掉 %%60 。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2007-01-17 02:28 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
当时随手写了,修正:
@echo off
:begin
cls
echo.
set input=
set /p input= 请输入秒数(退出请直接按回车):
if not defined input exit
set /a SS=%input%%%60
set /a MM=%input%/60%%60
set /a HH=%input%/3600%%60
if %HH% GEQ 24 set /a HH=HH%%24
set /a DD=%input%/86400
echo.
echo %DD% 天 %HH% 小时 %MM% 分 %SS% 秒
echo.
pause
goto begin


带毫秒的:
PS:毫秒是1000进1秒
@echo off
:begin
cls
echo.
set input=
set /p input= 请输入秒数(退出请直接按回车):
if not defined input exit
for /f "tokens=1* delims=." %%i in ("%input%") do set input=%%i&&set .n=%%j
if "%.n%" == "" set .n=0
if "%.n:~1%" == "" set .n=%.n%0
if "%.n:~2%" == "" set .n=%.n%0
if "%.n:~0,1%" == "0" set .n=%.n:~1%
if "%.n:~0,1%" == "0" set .n=%.n:~1%


set /a SS=%input%%%60
set /a MM=%input%/60%%60
set /a HH=%input%/3600%%60
if %HH% GEQ 24 set /a HH=HH%%24
set /a DD=%input%/86400
echo.
echo %DD% 天 %HH% 小时 %MM% 分 %SS% 秒 %.n% 毫秒
echo.
pause
goto begin


[ Last edited by zh159 on 2007-1-16 at 09:42 PM ]
10 发表于 2007-01-17 02:37
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
处理毫秒的时候有问题呀.比如输入5485.3,那.3应该是300毫秒吧,而不是3毫秒呀.
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
11 发表于 2007-01-17 02:46 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
Originally posted by hxuan999 at 2007-1-16 13:37:
处理毫秒的时候有问题呀.比如输入5485.3,那.3应该是300毫秒吧,而不是3毫秒呀.

忘了-_-|||
谢谢提醒,已修正,不过还不能处理4位小数以上的

[ Last edited by zh159 on 2007-1-16 at 01:48 PM ]
12 发表于 2007-01-17 02:54
中级用户
★★
DOS之日
积分 337
发帖 161
注册 2006-11-04 05:27
UID 69523
性别 男
状态 离线
我也来一个,带毫秒的(超过四位小数的被截取到000.00毫秒):


  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. cls
  4. echo;
  5. set input=
  6. set /p input= 请输入秒数(退出请直接按回车 )
  7. if not defined input exit
  8. for /f "tokens=1* delims=." %%a in ("%input%") do set input=%%a & set D5=%%b00000
  9. for /l %%i in (4,-1,2) do set /a "D%%i=!input!%%60" && set /a "input=!input!/60"
  10. set "D5=!D5:~0,3!.!D5:~3,2!"
  11. set /a "D1=!input!%%24"
  12. echo;&echo; %D1%%D2% 小时 %D3%%D4%%D5% 毫秒&echo;
  13. pause
  14. goto begin
hxuan: 2007-01-17 12:52


此程序已经修正.

[ Last edited by hxuan999 on 2007-1-17 at 01:59 PM ]
for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
13 发表于 2007-01-17 04:15 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  12楼的代码有如下缺陷:

  1、截取小数部分用替换语句是容易出错的,比如:整数部分是小数部分的某一个字符串的时候,如 23.1234。建议不要使用如此另类的语句,还是用 for 语句中的 delims=. 来提取吧;

  2、计算天数的时候,仍然除了60,这是不正确的。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
14 发表于 2007-01-17 07:22 ·  中国 北京 朝阳区 联通
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
UID 67972
状态 离线


@echo off
:start
setlocal
cls&echo.
set/p input=请输入秒数:
for /f "tokens=1,2 delims=." %%a in ("%input%") do set input=%%a&set input1=%%b
for /l %%a in (1,1,2) do set/a T%%a=input%%60,input/=60
set/a T3=input%%24,T4=input/24
set input1=%input1%0000
for /f "tokens=* delims=0" %%a in ("%input1:~0,4%") do set T0=%%a
echo/
if defined T0 (echo %T4% 天 %T3% 小时 %T2% 分 %T1% 秒 %T0% 毫秒
) else (echo %T4% 天 %T3% 小时 %T2% 分 %T1% 秒)
echo\
pause
endlocal
goto start



..

认识自己,降伏自己,改变自己
,才能改变别人!
15 发表于 2007-01-17 09:39 ·  美国 弗吉尼亚州 华盛顿县 Microsoft
高级用户
★★
积分 783
发帖 268
注册 2006-12-26 17:18
UID 74627
性别 男
状态 离线
各位厉害。。竟然连毫秒都准确到了 。。看来可以修改成春节倒计时了^^
论坛跳转: