5

我目前正在学习 zsh,现在我想使用strftime,但我得到:

zsh: command not found: strftime

我认为我做错了什么,因为我看到人们一直在他们的点文件中使用该功能。

4

3 回答 3

7

strftimezsh名为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
于 2010-04-18T15:30:46.783 回答
2

strftime是一个 C 函数,我相信date在命令行上具有所有相同的功能。

查看man date更多。

使用该--date=STRING选项来指定要格式化的日期,而不是获取当前时间。

于 2010-04-18T11:59:20.180 回答
0

对于通过 Google 到达这里的任何人,现在有一种不需要zmodload. (我用它来检测 .zshrc 何时由于资源争用而变慢,所以我不希望它添加新的文件系统请求。)

${(%):-"%D{STRFTIME_STRING_HERE}"}

它的要点如下:

  1. Zsh 允许${VAR:-DEFAULT}在没有VAR.
  2. 放在(%)前面VAR可以扩展在PS1和朋友中使用的替换标记。(这是一个非常强大的功能,因为它还授予对诸如%F{green}. 之类的访问权限。有关更多信息,请参阅“提示序列的扩展” man zshmisc。)
  3. 在提示扩展的字符串中,%D{...}调用strftime(3).

我发现%D{%s}特别有用,因为%s检索“自纪元以来的秒数”时间戳,然后您可以对其进行算术运算。

(请注意,虽然在 Linux、AIX、Illumos、MINIX、OSX 和所有 BSD 系列系统上受支持,但它不是 POSIX 的一部分,并且未在Solaris、HP-UX%s的在线文档中列为受支持, strftimeUnixWare、OpenServer 或 Cygwin 和 MinGW 所依赖的 Windows 库。)

于 2019-11-07T09:53:02.453 回答