|
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 |
|
|
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: |
- @echo off&setlocal enabledelayedexpansion
- :begin
- cls
- echo;
- set input=
- set /p input= 请输入秒数(退出请直接按回车 ):
- if not defined input exit
- for /f "tokens=1* delims=." %%a in ("%input%") do set input=%%a & set D5=%%b00000
- for /l %%i in (4,-1,2) do set /a "D%%i=!input!%%60" && set /a "input=!input!/60"
- set "D5=!D5:~0,3!.!D5:~3,2!"
- set /a "D1=!input!%%24"
- echo;&echo; %D1% 天 %D2% 小时 %D3% 分 %D4% 秒 %D5% 毫秒&echo;
- pause
- 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 |
|
|
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 |
|