返回列表 发帖

[日期时间] 批处理版世界时间查看器

昨天在网上和一个外国人聊天,当时想查一下他那儿是几点,就在网上搜索了一些世界时间的网站。后来下线后就琢磨着自己来编一个简单的世界时间查看器,方便以后用。在网上搜索了一些资料,昨晚编好了一个粗糙的代码,今天中午又大概修改了一下。拿出来给大家分享下,如有bug请指出啊!需要一个文本文件city.txt在二楼列出。

经 随风 提醒,两个文件合为一个bat文件,在二楼下载!
@echo off&setlocal enabledelayedexpansion
:begin
color 0e
mode con cols=65 lines=26
set n=0
for /f "tokens=1-4" %%i in (city.txt) do (
    if not "!country!" equ "%%i" (
       set /a n+=1
       set "t!n!-1=%%i %%j"
       set country=%%i
       set m=1
    ) else (
       set /a m+=1
       set "t!n!-!m!=%%i %%j"
    )
)
for /f "tokens=1-3 delims=- " %%i in ("%date%") do (
    set year=%%i
    set /a month=1%%j-100
    set /a day=1%%k-100
)
set "days=312831303130313130313031"
set /a ok="^!(year%%4) & ^!(^!(year%%100)) | ^!(year%%400)"
if !ok! equ 1 set days=!days:3128=3129!
set time1=%time%
set time2=%time%
if "%time1:~,1%" equ " " (set time1=%time:~1,1%) else set time1=%time:~,2%
:code
cls
echo.
echo                       ╭────────╮
echo     ╭────────┤ 世界时间查看器 ├────────╮
echo     │                ╰────────╯                │
echo     │                                                    │
echo     │       本程序的功能为查询世界各地主要城市当前日期与 │
echo     │                                                    │
echo     │  时间,采用算法为区时计算法。输入dir即可查看各个国 │
echo     │                                                    │
echo     │  家城市的代号,输入代号即可查看各地时间。代号位于  │
echo     │                                                    │
echo     │  每个城市的后面。例如输入57-12即可查看[美国]洛杉矶 │
echo     │                                                    │
echo     │  的当前时间。                                      │
echo     │                                                    │
echo     │       已考虑到闰年二月份多一天以及月底加一天与月初 │
echo     │                                                    │
echo     │  减一天的情况,请大家测试。                        │
echo     │                                                    │
echo     │                                  code by lhjoanna  │
echo     │                                                    │
echo     ╰──────────────────────────╯
echo.
set /p code=请输入要查询的国家城市的代号:
if "%code%" equ "dir" ( call :display &echo.&echo.&goto code )
call set "str=%%t!code!%%"
for /f "tokens=3,4" %%i in ('findstr "%str%" city.txt 2^>nul') do (
    set /a result=time1+%%j
    if !result! lss 0 (
        set /a result+=24
        if not !day! equ 1 ( set /a day-=1 ) else (
           if not !month! equ 1 (
             set /a month-=1
             set /a x=month*2-2
             set day=!days:~%x%,2!
           ) else set month=12&set day=31&set /a year-=1
        )
    ) else (
      if !result! geq 24 (
          set /a result-=24
          set /a y=month*2-2
          set day_=!day:~%y%,2!
          if not !day! equ !day_! (set /a day+=1) else (
             if not !month! equ 12 ( set /a month+=1&set day=1) else set month=1&set
day=1&set /a year+=1
          )
      )
    )
    echo.&echo %str% 现在时间为:!year!-!month!-!day! !result!%time2:~2%
)
pause>nul
goto begin
:display
cls
set n=0
for /f "tokens=1-4" %%i in (city.txt) do (
    if not "!country!" equ "%%i" (
       set /a n+=1
       echo.
       set /p=【!n!%%i:%%j!n!-1 <nul
       set "t!n!-1=%%i %%j"
       set country=%%i
       set m=1
    ) else (
       set /a m+=1
       set /p=%%j!n!-!m! <nul
       set "t!n!-!m!=%%i %%j"
    )
    for %%a in (20 41 60 80 101) do (
        if !n! equ %%a pause>nul&cls
    )
)
goto :eofCOPY
链接: https://pan.baidu.com/s/1QnKMQLrpn89KMDVjdhfljg?pwd=2vpc
1

评分人数

    • wxcute: 辛苦收集,谢谢分享。PB + 8

city.txt

经过 随风 提醒,现把txt文件和bat文件合为一个,好像字数限制,只能打包上传了,一个是单纯的city.txt文件,方便大家研究,另一个为合并以后的bat文件。
        默认中国区时为0,大家可从city.txt中查看。本应考虑某些地区采用夏令时制提前一个小时,但由于各个国家地区在不同时期,不同形势下采用各不相同,故未计入算法。
1

评分人数

TOP

感谢分享,不过把这个txt文件和bat合为一个文件不是更方便吗?
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2008-11-26 20:40 发表
感谢分享,不过把这个txt文件和bat合为一个文件不是更方便吗?

文件已经合并,并且打包上传,谢谢提醒,欢迎提建议啊!

TOP

多谢分享,辛苦收集。

TOP

我下载了下面那个文件,
输入dir  并没有出现国家代号啊!!! (CMD根本没反应)
没有代号就不能查。

TOP

那是因为你少了city.txt文件吧。你从二楼下载解压后运行那个bat文件,那个是合并以后的。还有就是dir不能带空格,只是dir。

TOP

值得研究!!!支持!!!

TOP

怎么没办法用啊
怎么用?

TOP

你看一下主界面的说明,输入dir查看代号,输入代号查看时间。

TOP

很好用  谢谢了

TOP

返回列表