Board logo

标题: [日期时间] 批处理获取Unix时间戳 [打印本页]

作者: Demon    时间: 2012-8-31 20:55     标题: 批处理获取Unix时间戳

C标准库中的算法:
  1. @echo off
  2. call :time t
  3. echo %t%
  4. pause & exit
  5. :+ Author: Demon
  6. :+ Date: 2012/8/31
  7. :+ Website: http://demon.tw
  8. :time
  9. setlocal
  10. for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr .') do set %%x
  11. set /a "year -= 1900, t = (year - 70) * 365 + ((year - 1) >> 2) - 17, leap = year & 3"
  12. for /f "tokens=%month%" %%i in ("-1 30 58 89 119 150 180 211 242 272 303 333 364") do set /a t += %%i
  13. if %leap% equ 0 if %month% gtr 1 set /a t += 1
  14. set /a t += day, t *= 24, t += hour, t *= 60, t += minute, t *= 60, t += second
  15. endlocal & set %1=%t% & goto :eof
复制代码
反人类的算法:
  1. @echo off
  2. call :time t
  3. echo %t%
  4. pause & exit
  5. :+ Author: Demon
  6. :+ Date: 2012/8/31
  7. :+ Website: http://demon.tw
  8. :time
  9. setlocal
  10. for /f "skip=1 tokens=1-9" %%a in ('wmic path win32_utctime ^| findstr .') do set /a m=%%e+9,m%%=12,y=%%i-m/10,t=365*y+y/4-y/100+y/400+(m*306+5)/10+%%a-719469,t=t*86400+%%c*3600+%%d*60+%%g
  11. endlocal & set %1=%t% & goto :eof
复制代码

作者: plp626    时间: 2012-8-31 23:30

utc 时间可以通过 本地 time 变量 给小时+8 来获取, 不知我理解的对否?
作者: Demon    时间: 2012-8-31 23:38

utc 时间可以通过 本地 time 变量 给小时+8 来获取, 不知我理解的对否?
plp626 发表于 2012-8-31 23:30


北京时间是UTC+8吧,应该-8才对。

但是本地时间是跟系统时区设置有关的,假定为UTC+8的话不具有可移植性,而要获取时区设置仍然要借助外部命令,所以想仅靠内部命令提高效率似乎是不行的。
作者: plp626    时间: 2012-8-31 23:43

恩, 有道理, 只是这个wmic 很不友好,




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2