Board logo

标题: 如何判断处于哪个时间段? [打印本页]

作者: pykacha     时间: 2008-5-13 09:51    标题: 如何判断处于哪个时间段?

我想实现下面功能
如果当前时间处于上午8:45到9:10之间,则设置wt为“早”,如果是9:10到10:00之间,则设置wt为“迟”。
请问要如何编写?
作者: plp626     时间: 2008-5-13 10:23
if/?


if %time%大于 8:45 if %time% 小于 9:10 (set wt=早) else set wt 迟
作者: HAT     时间: 2008-5-13 11:01

@echo off
set wt=
if "%time:~0,5%" geq " 8:45" (
  if "%time:~0,5%" lss " 9:10" (
    set wt=早
  ) else if "%time:~0,5%" geq " 9:10" (
    if "%time:~0,5%" lss "10:00" (
      set wt=迟
    )
  )
)
echo %wt%

作者: huahua0919     时间: 2008-5-13 11:52
8:45这样的结构能够用于if的判断大小吗??
作者: HAT     时间: 2008-5-13 12:01


  Quote:
Originally posted by huahua0919 at 2008-5-13 11:52 AM:
8:45这样的结构能够用于if的判断大小吗??

你能给出一个不能的例子吗??
作者: huahua0919     时间: 2008-5-13 12:05
执行你的程序说 echo 处于关闭状态
作者: HAT     时间: 2008-5-13 12:41


  Quote:
Originally posted by huahua0919 at 2008-5-13 12:05 PM:
执行你的程序说 echo 处于关闭状态

正常吧,仔细看看楼主的要求,对于不在那个两个时间段的情况没做要求。
作者: 26933062     时间: 2008-5-13 13:19

@echo off
set t=%time:~0,5%
for /f "tokens=1,2 delims=:." %%a in ("%t%") do (
   set /a s=100%%a%%100*60,f=100%%b%%100+s
)
set /a w=1/(f/525),1/(550/f)2>nul&&set var=早
set /a w=1/(f/551),1/(600/f)2>nul&&set var=迟
if defined var (echo %t% %var%) else echo %t% 不在指定时间段。
pause
[ Last edited by 26933062 on 2008-5-13 at 01:20 PM ]
作者: pooronce     时间: 2008-5-13 13:26

if %time:~0,2%%time:~3,2% geq 845 (
        if %time:~0,2%%time:~3,2% leq 910 (
                set "wt=早"
                ) else if %time:~0,2%%time:~3,2% gtr 910 (
                        if %time:~0,2%%time:~3,2% leq 1000 (
                                set "wt=迟"
                                ) else (
                                        set "wt=太迟"
                                        )
                        )
        ) else set "wt=太早"

echo %wt%

作者: joyn     时间: 2008-5-13 14:24
@echo off&setlocal ENABLEDELAYEDEXPANSION
set wt=
if "!time:~0,5!" geq " 8:45" (
  if "!time:~0,5!" lss " 9:10" (
    set wt=早
  ) else if "!time:~0,5!" geq " 9:10" (
    if "!time:~0,5!" lss "10:10" (
      set wt=迟
    )
  )
)
echo.!wt!
"else set wt=不在时间段内"这一段可以避免提示"ECHO处于关闭状态"而直接提示现在不是所在条件时间段内~

[ Last edited by joyn on 2008-5-13 at 02:27 PM ]
作者: plp626     时间: 2008-5-13 15:27
大家,想复杂了。
粘贴到命令行:

if %time% geq 08:45 if %time% lss 09:10 (echo 早) else if %time% geq 09:10 echo 迟

作者: pooronce     时间: 2008-5-13 15:53


  Quote:
Originally posted by plp626 at 2008-5-13 03:27 PM:
大家,想复杂了。
粘贴到命令行:

if %time% geq 08:45 if %time% lss 09:10 (echo 早) else if %time% geq 09:10 echo 迟

%time%在10点前是不显示前置0的
另外你这个在时间段之外都是迟了好像
作者: plp626     时间: 2008-5-13 16:22
RE:pooronce
和那个没关系,
当前时间大于9:10才显示迟,你把9:10改小些再测试测试。。。


if %time% geq 08:45 if %time% lss 09:10 echo 早
if %time% geq 09:10 echo 迟


[ Last edited by plp626 on 2008-5-13 at 04:37 PM ]
作者: pykacha     时间: 2008-5-13 17:52
想不到短短时间内前辈们为我提供了那么多种方法,每种方法我都学习尝试了。
谢谢大家了!
作者: pooronce     时间: 2008-5-13 17:57


  Quote:
Originally posted by plp626 at 2008-5-13 04:22 PM:
RE:pooronce
和那个没关系,
当前时间大于9:10才显示迟,你把9:10改小些再测试测试。。。

[code]if %time% geq 08:45 if %time% lss 09:10 echo 早
if  ...

你上面那段代码,自己试过没?
我改成8点10分都是迟的

有关系的,带0的就是8进制了,甚至会命令出错不能比了。或者呢字符串比就是空格跟0比了,能一样么
作者: pykacha     时间: 2008-5-13 17:58
其实我最终的目的是要判断当前时间是学校上课的第几节课,在前辈的指导下我完成了代码,希望各位前辈看看还可不可以优化。
-----------------------------------------
set wt=不在时间段内
set t1=%time:~0,5%
if "%t1%" geq " 7:30" (
set wt=早读
)
if "%t1%" geq " 8:25" (
set wt=第一节
)
if "%t1%" geq " 9:15" (
set wt=第二节
)
if "%t1%" geq "10:05" (
set wt=第三节
)
if "%t1%" geq "10:55" (
set wt=第四节
)
if "%t1%" geq "13:30" (
set wt=午读
)
if "%t1%" geq "14:25" (
set wt=第五节
)
if "%t1%" geq "15:20" (
set wt=第六节
)
if "%t1%" geq "16:00" (
set wt=第七节
)
if "%t1%" geq "16:55" (
set wt=放学后
)
echo %wt%
--------------------------------------
谢谢大家。
作者: pooronce     时间: 2008-5-13 17:58
另,实际上不带引号的话,空格就给忽略掉了,长度都不同了,还怎么比
作者: pooronce     时间: 2008-5-13 18:05
re: pykacha
你那段代码,如果都是这样单命令的话,括号可以去掉全部放单行里
另,比较的数据建议不要用带冒号的格式,既然用到了中转变量,那么可以这样:
::截取出时和分连到一起
set time1=%time:~0,2%%time:~3,2%
::去除时间最前面可能存在的那个空格
set time1=%time1: =%

::下面再开始比较吧,全部直接用数字,如845,910,1000等

作者: knoppix7     时间: 2008-5-13 18:07
时*分然后/一个数.
::EXP(只是一种方法)
上课时间假设8:00,在是9:00,一节课40分钟
然后[(9*60+1分%%100)-(8*60+1分%%100)]/40+1,得2.说明是第二节.
这样可以很据结果来分析.不过第四节以后的检查就要加修正值了

而且不是特别准就是了

[ Last edited by knoppix7 on 2008-5-13 at 06:09 PM ]
作者: plp626     时间: 2008-5-13 18:36
我说你们向复杂了还不信,只是有点疏忽,没带双引号。。。

Colstr函数在函数库里有,我就不写了:

@echo off
set "time= 9:05:45.99"
echo 假设当前时间为%time%
set/p=若在[8:45, 9:10]内显示<nul
call colstr a 0 "早" 0 1 0
set/p=  若大于9:10显示<nul
call colstr d 0 "迟" 0 1 1
echo ---------------------------------------

if "%time%" geq " 8:45" if "%time%" lss " 9:10" call colstr a 0 "早" 0 1 1
if "%time%" geq " 9:10" call colstr d 0 "迟" 0 1 1
pause


[ Last edited by plp626 on 2008-5-13 at 08:54 PM ]
作者: pooronce     时间: 2008-5-13 18:51
呵呵,这样带上引号倒是靠谱了,想来1也应该比空格大。(还没试过这样比啊)
作者: pykacha     时间: 2008-5-13 19:31
pooronce在18楼的提议很好,这样在编写代码时设置每节课时间时输入起来方便了不少,以后修改也方便.
19楼前辈的意见可以有助于我改进上午的时间判断,下午因为受眼保健操影响,就没什么规律了.

多谢了
作者: HAT     时间: 2008-5-13 19:39    标题: 16楼

尽量使用if...else...来代替if...
作者: bat-zw     时间: 2008-5-14 00:11    标题: 可以用for来精简下:


@echo off&setlocal enabledelayedexpansion
set "times=早读 第一节 第二节 第三节 第四节 午读 第五节 第六节 第七节 放学后"
set "hm=7:30 8:25 9:15 10:05 10:55 13:30 14:25 15:20 16:00 16:55"
set t=%time:~,2%%time:~3,2%
for %%i in (%hm%) do (
    set /a n+=1&set a=%%i&set a=!a:^:=!
    if %t% lss 730 (
       goto end
       ) else (
       if %t% equ !a! (
          goto echo
          ) else (
          if %t% lss !a! set /a n-=1&goto echo
       )
  
    )
)
:end
echo 不在时间段内
pause>nul&goto :eof
:echo
for /f "tokens=%n% delims= " %%i in ("%times%") do echo %%i
pause>nul
[ Last edited by zw19750516 on 2008-5-14 at 01:18 AM ]