使用KornShell将月数转换为日期

使用KornShell将月数转换为日期,shell,date,unix,scripting,ksh,Shell,Date,Unix,Scripting,Ksh,我试图将月数转换为名称,但它将输出作为当前月份,而不是变量中给定的日期 科恩希尔(ksh)代码: datep= 2013-10-22 echo $datep |printf "%(%B)T\n" 这样做: $ datep="2013-10-22" $ date -d"$datep" "+%B" October 根据人员日期 -d,--date=STRING 显示由字符串描述的时间,而不是“现在” 因此,我们得到: $ date -d"$datep" Tue Oct 22 00:00:00 C

我试图将月数转换为名称,但它将输出作为当前月份,而不是变量中给定的日期

科恩希尔(ksh)代码:

datep= 2013-10-22
echo $datep |printf "%(%B)T\n"
这样做:

$ datep="2013-10-22"
$ date -d"$datep" "+%B"
October
根据
人员日期

-d,--date=STRING

显示由字符串描述的时间,而不是“现在”

因此,我们得到:

$ date -d"$datep"
Tue Oct 22 00:00:00 CEST 2013
然后你说你想要
%B
,也就是说,也是从
人工日期开始的:

%B

区域设置的完整月份名称(例如,一月)

因此,这只是在字符串末尾使用格式的问题

其他例子:

$ date -d"$datep" "+%Y" #year
2013
$ date -d"$datep" "+%F" #date
2013-10-22
$ date -d"$datep" "+%T" #time (if not given, gets the default)
00:00:00

printf
不读取标准输入,因此它假定今天的日期为
%t
格式的默认参数;您需要提供日期作为参数

printf "%(%B)T\n" "$datep"

谢谢你的回答,你能简单解释一下它是如何工作的吗。我想我应该在我的机器上安装
ksh
来做一些测试。我喜欢把它看作被遗忘的shell:)。它有一些功能仍然没有被
bash
(或者甚至是
zsh
,令人惊讶的是)。export month\u end\u date=
tail-1 month\u end\u dt.txt
export month=
printf“%(%B)t\n”“$month\u end\u date”
我在
month\u end\u dt.txt文件中有一个日期,并将该日期分配给
month\u end\u date
参数。我想将其作为全局变量,该变量将在许多脚本中使用,因此将月份名称导出为变量
month
我得到一个错误main.ksh[7]:export:%(%B)T\n:不是identifier@user2014896要计算命令,请执行
var=$(命令)
。在您的例子中,
end\u date=$(tail-1…)
。至于其余的问题,最好是更新你的答案或问一个新的。在注释中很难检查代码。等号后不允许有(无引号)空格:使用
datep=2013-10-22
.export month\u end\u date=
tail-1 month\u end\u dt.txt
export month=
printf“%(%B)T\n”“$month\u end\u date”
我在
month\u end\u dt.txt文件中有一个日期,并将该日期分配给
month\u end\u date
参数。我想将其作为全局变量,它将在许多脚本中使用,因此将月份名称导出为变量
month
我得到了一个错误main.ksh[7]:export:%(%B)T\n:不是标识您需要首先捕获
printf
的输出:
导出任意=$(printf“%(%B)T\n”“$datep”)