Board logo

标题: [日期时间] [已解决]cmd下如何输出统一格式的日期时间 [打印本页]

作者: habulu    时间: 2018-1-11 09:44     标题: [已解决]cmd下如何输出统一格式的日期时间

本帖最后由 habulu 于 2018-1-19 12:55 编辑

cmd下如何输出当前时间
经常会碰到服务器时间格式不是常规的那种格式,比如(2018年1月11日可能是这种输出):
C:\Users\Administrator>echo %date%
01\11\18 周四

C:\Users\Administrator>echo %time%
9:36:45.50


一般服务器上面也不敢随便去改默认的输出格式,那么有没什么不管原先的默认格式怎么样,统一输出成这种(2018-01-11 09:36:45),网上的那些方式一般不管用:
C:\Users\Administrator>echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%
01\1-\1- 周  9:43:46

完全是乱的
作者: codegay    时间: 2018-1-14 07:38

例行推荐使用别的语言。就不用浪费纠结这种问题了。同时收益应该也更加大。
nim语言的时间格式例子:
  1. import times
  2. echo getTime().getLocalTime.format("yyyy-MM-dd HH:mm:ss")
  3. echo getDateStr() & "- -" & getClockStr()
  4. #输出:
  5. #2018-01-14 07:36:18
  6. #2018-01-14- -07:36:18
复制代码
这个github项目的作者想做一个各种语言版的日历,在这里收集了各种语言的日期格式化的代码;
https://github.com/Sneezry/hacking-date
作者: slore    时间: 2018-1-14 13:14

有些时候BAT不方便,尤其是字符串处理,推荐用别的语言是对的建议。
但是,LZ的这个需求犯不着用其他语言,用BAT能混用的且系统自带的js就行了。

cscript //nologo gettime.js
  1. var time = new Date();
  2. WScript.echo(time);
  3. WScript.echo(getYMDHmS(time));
  4. function getYMDHmS(dt){
  5.   var s = dt.getFullYear() + '-' + fillZero(dt.getMonth() + 1) + '-' + dt.getDate();
  6.   s += ' ' + fillZero(dt.getHours()) + ':' + fillZero(dt.getMinutes()) + ':' + fillZero(dt.getSeconds());
  7.   return s;
  8. }
  9. function fillZero(str) { return ('00' + str).slice(-2);}
复制代码

作者: /zhqsystem/zhq    时间: 2018-1-14 18:49

  1. :1
  2. call:GetDateTime
  3. echo,%#GetDate#% %#GetTime#%
  4. goto:1
  5. pause
  6. goto:eof
  7. :GetDateTime
  8. call:GetDate
  9. call:GetTime
  10. goto:eof
  11. :GetDate
  12. for /f "tokens=1,* delims=:" %%c in ('chcp')do for /f %%c in ("%%d")do set "#chcp#=%%c"&&chcp 437
  13. set "#GetDate#="&&for /f "tokens=*" %%i in ('"echo,|date"')do (for %%j in (%%i)do set "#GetDate#=%%j")&&call set "#GetDate#=%%#GetDate#:/=-%%"&&chcp %#chcp#%&goto:eof
  14. goto:eof
  15. :GetTime
  16. for /f "tokens=1,* delims=:" %%c in ('chcp')do for /f %%c in ("%%d")do set "#chcp#=%%c"&&chcp 437
  17. set "#GetTime#="&&for /f "tokens=*" %%i in ('"echo,|Time"')do (for %%j in (%%i)do set "#GetTime#=0000000%%j")&&call set "#Gettime#=%%#GetTime#:~-11%%"&&chcp %#chcp#%&goto:eof
  18. goto:eof
复制代码

作者: Batcher    时间: 2018-1-15 20:20

参考 http://bbs.bathome.net/thread-3328-1-1.html
作者: idean    时间: 2018-2-22 23:43

本帖最后由 idean 于 2018-2-22 23:48 编辑

以前也纠结这个问题,后来也想到一种很简单的方法,用批出处理的嵌套就可以实现。批处理其实还是很强大的,有人还实现了面向对象,就是效率差了一点




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