中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 批处理 将秒转换成日时分秒 上一主题 | 下一主题
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『楼 主』:  批处理 将秒转换成日时分秒

一道C语言题 请用批处理做 例如:

输入(秒):3662

显示: 0天 1 小时 1分钟 2秒

2007-1-16 22:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  以下演示代码没有做错误检测,请测试:
@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 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 PPdos 分数: +2  时间:2007-1-17 10:27




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-16 23:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  


@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


   此帖被 +2 点积分    点击查看详情   
评分人:【 PPdos 分数: +2  时间:2007-1-17 10:22


2007-1-16 23:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  呵呵,zh159 兄的思路更直接啊,我复杂化了。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-16 23:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  

精彩!!!顶~~



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2007-1-16 23:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 6 楼』:  

一个简单的数学问题啊
呵呵

程序就也要简单

2007-1-17 00:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 7 楼』:  

如果输入的是
xxxxx.34

还要考虑毫秒

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

[ Last edited by scriptor on 2007-1-16 at 11:09 AM ]

2007-1-17 00:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  3楼的代码计算天数的时候,再除以60来取余数会出问题的,应该去掉 %%60 。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-17 00:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  

当时随手写了,修正:
@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 ]

2007-1-17 02:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hxuan999
中级用户

DOS之日


积分 337
发帖 161
注册 2006-11-4
状态 离线
『第 10 楼』:  

处理毫秒的时候有问题呀.比如输入5485.3,那.3应该是300毫秒吧,而不是3毫秒呀.



for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
2007-1-17 02:37
查看资料  发送邮件  发短消息 网志  OICQ (33899867)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 11 楼』:  



  Quote:
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 ]

2007-1-17 02:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hxuan999
中级用户

DOS之日


积分 337
发帖 161
注册 2006-11-4
状态 离线
『第 12 楼』:  

我也来一个,带毫秒的(超过四位小数的被截取到000.00毫秒):

  Quote:

  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
2007-1-17 02:54
查看资料  发送邮件  发短消息 网志  OICQ (33899867)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 13 楼』:  

  12楼的代码有如下缺陷:

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

  2、计算天数的时候,仍然除了60,这是不正确的。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-17 04:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 14 楼』:  


@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
..




认识自己,降伏自己,改变自己
,才能改变别人!
2007-1-17 07:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『第 15 楼』:  

各位厉害。。竟然连毫秒都准确到了 。。看来可以修改成春节倒计时了^^

2007-1-17 09:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: