我目前正在学习 zsh,现在我想使用strftime
,但我得到:
zsh: command not found: strftime
我认为我做错了什么,因为我看到人们一直在他们的点文件中使用该功能。
我目前正在学习 zsh,现在我想使用strftime
,但我得到:
zsh: command not found: strftime
我认为我做错了什么,因为我看到人们一直在他们的点文件中使用该功能。
strftime
在zsh
名为datetime
. 该zmodload
命令从以冒号分隔的目录列表中加载模块$module_path
。
在我的系统上:
% echo $module_path
/usr/lib/zsh/4.3.10
% ls -l $module_path
drwxr-xr-x 3 root root 4096 2009-11-05 01:03 zsh
% ls -l $module_path/zsh/datetime*
-rw-r--r-- 1 root root 9828 2009-09-10 02:45 /usr/lib/zsh/4.3.10/zsh/datetime.so
% type -a strftime
strftime not found
% zmodload zsh/datetime
% strftime %Y-%m-%d 1271603087
2010-04-18
% type -a strftime
strftime is a shell builtin
% /bin/date -d @1271603087 +%Y-%m-%d
2010-04-18
strftime
是一个 C 函数,我相信date
在命令行上具有所有相同的功能。
查看man date
更多。
使用该--date=STRING
选项来指定要格式化的日期,而不是获取当前时间。
对于通过 Google 到达这里的任何人,现在有一种不需要zmodload
. (我用它来检测 .zshrc 何时由于资源争用而变慢,所以我不希望它添加新的文件系统请求。)
${(%):-"%D{STRFTIME_STRING_HERE}"}
它的要点如下:
${VAR:-DEFAULT}
在没有VAR
.(%)
前面VAR
可以扩展在PS1
和朋友中使用的替换标记。(这是一个非常强大的功能,因为它还授予对诸如%F{green}
. 之类的访问权限。有关更多信息,请参阅“提示序列的扩展” man zshmisc
。)%D{...}
调用strftime(3)
.我发现%D{%s}
特别有用,因为%s
检索“自纪元以来的秒数”时间戳,然后您可以对其进行算术运算。
(请注意,虽然在 Linux、AIX、Illumos、MINIX、OSX 和所有 BSD 系列系统上受支持,但它不是 POSIX 的一部分,并且未在Solaris、HP-UX%s
的在线文档中列为受支持, strftime
UnixWare、OpenServer 或 Cygwin 和 MinGW 所依赖的 Windows 库。)