Ste*_*itt 16
locale 将告诉您当前语言环境中月份的名称:
locale mon
Run Code Online (Sandbox Code Playgroud)
因此:
$ LC_TIME=en_GB.UTF-8 locale mon
January;February;March;April;May;June;July;August;September;October;November;December
$ LC_TIME=fr_FR.UTF-8 locale mon
janvier;février;mars;avril;mai;juin;juillet;août;septembre;octobre;novembre;décembre
Run Code Online (Sandbox Code Playgroud)
如果您希望在不同的行中显示月份,请将输出通过管道传输到tr ';' '\n'.
虽然更喜欢这个locale提案,但假设 GNU 实现了date,这个提案date只会运行一次,而不是 12 次:
printf "%02d/01/2000\n" {1..12} | LC_ALL=C date +%B -f-
January
February
March
April
.
.
.
Run Code Online (Sandbox Code Playgroud)
您可能并不打算将其限制为 bash,但是……您可以。
仅使用bash,但使用 bash 4.2 或更高版本(以支持printf %(fmt)T),并且仅假设一天中的秒数(尽管它应该是闰秒安全的):
#!/bin/bash
now=$(printf '%(%s)T' -1)
thism=$(printf '%(%B)T' "$now")
nextm=$thism
s=$now
until [[ "$thism" != "$nextm" ]]
do
s=$((s+86400))
nextm=$(printf '%(%B)T' "$s")
done
printf '%(%B)T\n' "$s"
while [[ "$thism" != "$(printf '%(%B)T' "$s")" ]]
do
while [[ "$(printf '%(%B)T' "$s")" == "$(printf '%(%B)T' $((s + 86400)))" ]]
do
s=$((s+86400))
done
s=$((s+86400))
printf '%(%B)T\n' "$s"
done
Run Code Online (Sandbox Code Playgroud)
初始分配以秒为单位设置当前时间和当前月份;“本月”变量初始化为当前月份,“秒”变量初始化为当前时间(以秒为单位)。
第一个循环通过将“seconds”变量增加一天的秒数来使我们摆脱当前月份。一旦我们离开当前月份,打印新月份的名称。
第二个循环贯穿一年,直到我们再次找到当前月份;该循环内部的内部循环会增加“秒”,直到该月的最后一天。一旦内部循环完成,我们增加一天,然后打印新月份的名称。然后外部(第二个)循环继续完成。
| 归档时间: |
|
| 查看次数: |
3764 次 |
| 最近记录: |