中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-25 13:43
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已放弃请勿进]关于对任意时间的回溯 查看 2,264 回复 32
楼 主 [已放弃请勿进]关于对任意时间的回溯 发表于 2008-06-01 21:58 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
&&因一个兄弟的求助贴,突然想到写一个任意时间回溯的批处理(非vbs),因为
知道要对分时日月年进行判断相当复杂,开始也做好了思想准备,可写到中间才
真正明白此中的难处,难就难在怎么把别人输入的任意时间进行转换计算,如输
入0 0 0 0 100000(指100000分钟),怎么把之转代成要回溯的年月日时分,我
脑壳想破了也没想清楚,望大家帮理一下思路,因问题的意思也难以描述清楚,
特在下面贴出我的部分代码:

@echo off&color 1f&mode con lines=10&setlocal enabledelayedexpansion
title ***时间回溯批处理*** by cn-dos zw19750516
:begin
cls&echo.&echo ===============================================================================
echo 请输入要回溯的时间,请按年 月 日 时 分的格式正确输入,无数值的请输入0,中间请用空格格开,请不要在数值前补0,如:10 6 1 19 44(10年6个月1天19个小时44分钟),0 0 0 0 400(400分钟),而10 06 01 19 44和10 6以及10 6 0 0 0 0均为错误输入。
echo ===============================================================================
echo.&set /p times=请在此输入:
echo %times: =%|findstr ""&&goto wrong
for %%i in (%times%) do (
set /a n+=1&set str=%%i
if "!str:~,1!" equ "0" goto wrong
)
if !n! neq 5 goto wrong
set n=0
for /f "tokens=1-5 delims= " %%a in ("%times%") do set /a ys=%%a,ms=%%b,ds=%%c,hs=%%d,mis=%%e
set /a y=%date:~,4%,m=100%date:~5,2%%%100,d=100%date:~8,2%%%100,mi=100%time:~3,2%%%100
if "%time:~,1%"=="" (set h=%time:~1,1%) else (set h=%time:~,2%)
set /a a=%y%%%4,b=%y%%%100,c=%y%%%400
if %c% equ 0 (set yun=A) else (if %a% equ 0 if %b% neq 0 set yun=A)
if defined yun (set n=29) else (set n=28)
set /a mi-=mis,h-=hs,d-=ds,m-=ms,h-=hs
............................
:wrong
cls&echo.&echo.&echo 错误的数值,请正确输入&ping /n 2 127.1>nul&goto begin


[ Last edited by zw19750516 on 2008-6-2 at 12:39 AM ]
批处理之家新域名:www.bathome.net
2 发表于 2008-06-01 22:17 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
顶,来人啊!!!
批处理之家新域名:www.bathome.net
3 发表于 2008-06-01 22:20 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
我对次类问题的算法就是:先把任意给定的日期转换为分钟数(根据需要还可转为秒数,小时,天数),再将分钟数转换为日前,

可以参看函数库里的函数---timediff
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
4 发表于 2008-06-01 22:23 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
其实对天数的回溯,论坛早有经典代码了。
只要对时间部分判断一下天数就可以了。
致精致简!
5 发表于 2008-06-01 22:28 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
兄弟们是不是想简单了啊,论坛相关的贴子我都看了的,还在qq上和namejm讨论了。
批处理之家新域名:www.bathome.net
6 发表于 2008-06-01 22:32 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
其实的我的本意是写一个任意时间回溯批处理出来,别人只要按年 月 日 时 分的输入格式输入的任一组五个数值就能得到回溯后是?年?月?日?时?分,如输入0 0 0 100000 0(100000小时)。
批处理之家新域名:www.bathome.net
7 发表于 2008-06-01 22:35 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
要求 zw19750516 兄公布自己的QQ号码和 namejm 的QQ号码^_^
8 发表于 2008-06-01 22:37 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
提供个思路
先把 月 、日、时间、转换成天数。
再用当前年减去输入的年、
再用结果减去转换的天数、最后在精确一下时间。
致精致简!
9 发表于 2008-06-01 22:52 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-6-1 22:37:
提供个思路
先把 月 、日、时间、转换成天数。
再用当前年减去输入的年、
再用结果减去转换的天数、最后在精确一下时间。

谢谢兄弟多次关注,请看这组数值20 34 600 4000 10000,回溯20年34个月600天4000个小时10000分钟,我有个思路就是把系统当前时间到公元元年元月元日零时零分的时间差以分为计数单位算出来,然后将输入的所有时间转为以分计数的值,再将系统值减去输入转换值,再从基准值公元元年元月元日零时零分正推年月日时分,问题是在转换输入值为分时是相当难的。如20年=?分,34月=?分
批处理之家新域名:www.bathome.net
10 发表于 2008-06-01 22:55 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
路过……

还是VBS爽嗬~~
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
11 发表于 2008-06-01 23:00 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
真的感觉好难啊,难道真用批处理就解决不了这个问题吗?
批处理之家新域名:www.bathome.net
12 发表于 2008-06-01 23:05 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
会不会溢出
还有我运行上面的怎么老是错误
这个P的作用是什么
简单!简单!再简单!
13 发表于 2008-06-01 23:11 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
若是全部转换为分的话将是一个超大数,那又牵扯到大数的计算问题。
另外还有个疑问:20年2个月600天4000个小时10000分钟
如上, 2 个月是指的什么? 比如今天是6月1日,2个月前是 4月1日吗?
还是当前时间减去 600天4000个小时10000分钟 以后的 2 个月?
致精致简!
14 发表于 2008-06-01 23:18 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by 26933062 at 2008-6-1 23:11:
若是全部转换为分的话将是一个超大数,那又牵扯到大数的计算问题。
另外还有个疑问:20年2个月600天4000个小时10000分钟
如上, 2 个月是指的什么 ...

20 34 600 4000 10000这个五个数值全是要经过推算的,不是简单的同位相减
批处理之家新域名:www.bathome.net
15 发表于 2008-06-01 23:19 ·  中国 广东 广州 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
若是全部转换为分的话将是一个超大数,那又牵扯到大数的计算问题。
另外还有个疑问:20年2个月600天4000个小时10000分钟
如上, 2 个月是指的什么? 比如今天是6月1日,2个月前是 4月1日吗?
还是当前时间减去 600天4000个小时10000分钟 以后的 2 个月?

我觉得楼主的意思是:20年+2个月+600天+4000个小时+10000分钟

但感觉没什么意义,甚至.............唉
论坛跳转: