命令'date + FORMAT'-%a,%A,%b等被称为什么?


10

date命令将输出当前日期和时间,如下所示:Fri Apr 12 15:04:03 UTC 2013

若要让我们可以使用自定义格式输出日期时间date +FORMAT,例如,像这样的:date "+%Y-%m-%dT%H:%M:%S%:z"这给像2013-04-12T15:04:37+00:00

但我想知道是什么%Y%m%d%H%M%S,等统称(即术语)。另外,T又叫什么,因为它与其余的有所不同?


3
“ FORMAT控制输出。解释的序列是……” –男人date,“ T”只是字面的“ T”。
manatwork 2013年

@manatwork在手册页中,我认为序列同时涉及%Y和及其各自的含义。
its_me 2013年

提示:date +"You will die in the year %Y"
Izkata

@Izkata毫无意义(?)
its_me 2013年

1
@TheoneManis只是一个T不那么特别的例子。另外,当我打字时(听同事的谈话),我的工作也很奇怪。
Izkata

Answers:


7

date命令的POSIX规范中使用的术语是“转换规范”。

date命令的格式字符串与C printf函数的格式字符串紧密相关。C标准也%d称为“转换规范”之类的东西。

T前面没有的%只是一个字符:“所有其他字符应不更改地复制到输出中。”

根据POSIX的更改历史部分中的描述date

为了与LC_TIME类别保持一致,说明被更新以引用转换规范,而不是字段描述符。

因此,显然该规范的较早版本使用了短语“字段描述符”,但是“转换规范”是当前的正式术语。

当然,这并不意味着您必须以这种方式引用它们。


有“ conversion sequences”或“ format sequences”适当的条件吗?我正在考虑sequencesspecifications因为它实际上是在的手册页中提到的date
its_me 2013年

2
@TheoneManis:这三个含义中的任何一个似乎都足够明显。
Keith Thompson

4

我认为“转义序列”或(在这种情况下)“转义百分比的特殊字符”将是引用它们的典型方式。反斜杠和转义百分号的序列在C语言中使用较多(例如printf),因此它们也已过滤成多个Unix命令(例如,指定shell提示)。

“转义序列”是“%Y”,“%m”,“%d”等;而“特殊字符”为“ Y”,“ m”,“ d”等。“%”将是“转义字符”(赋予以下字符不寻常/特殊含义的字符)。


3

本文来自IBM的信息中心明确指出,按字母顺序%Y%m%d%H%M%S,等被称为“ 现场描述符 ”。

您必须在每个字段描述符之前加上一个(百分号)。系统用指定的值替换字段描述符。[...]该date命令将其他所有字符都复制到输出中,而无需更改。

这回答了我的两个问题(关于%n&T)。我相信这是权威。


1
IBM没有发明date命令。是什么使他们的文档更具权威性?该命令的行为当前由POSIX定义,它不使用该术语。POSIX描述底部的更改历史记录显示:“更新描述以引用转换规范,而不是字段描述符,以与LC_TIME类别保持一致。”,这意味着“转换规范”而不是“字段描述符”是正确的当前学期。另请参阅我的最新答案。
基思·汤普森

2

就像其他人所说的,它T是一个字母T。但具体来说,您的示例date "+%Y-%m-%dT%H:%M:%S%:z"似乎是符合日期和时间的ISO-8601规范的格式字符串。因此,这里T是一个分隔符,用于将日期和时间分开。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.