转换年份&在bash中的一年中的一天

时间:2017-02-03 11:37:46

标签: macos shell time

我有一个包含两列的表格:年份和年份。我想将它们转换为日期(年 - 月 - 日)

以下命令似乎只能正确读取年份,而不是一年中的某一天:

date -j -f "%Y %j" "2005 241" +%F
2005-02-03

我在OS X上使用bash。有什么建议吗?

解决方案

$ yyyy="2015"; doy="241"; echo $(date -jf %s $(($(date -jf "%F %T" "$yyyy-01-01 23:59:30" +%s) + ((10#$doy - 1)) * 86400)) +"%F %T")
2015-08-29 23:59:30
$ date -j 082923592015 +%j
241

所以基本上,我们采用给定年份并构建当年第一天(即1月1日)的时间并将其转换为秒。然后,我们添加自一年的第一天以来的总秒数(小心这里!我们必须减去一个,因为计数指的是1月01日)。以秒为单位表示的结果总和最终转换为预期格式。

  • -j 未设置日期
  • -f 允许指定输入格式
  • + 允许指定输出格式
  • 自1970-01-01 00:00:00 UTC 以来
  • %s
  • %F 日期格式与%Y-%m-%d
  • 相同
  • %T 时间格式与%H相同:%M:%S
  • %j 一年中的日期为3位数字(例如,001 ... 366)
  • $(())设置算术上下文
  • 10#。将数字转换为10,以避免一年中的前导零问题(例如009,099)

1 个答案:

答案 0 :(得分:1)

通过使用Mac OS日期,我已成功运行:

date -j -f %s $(($(date -j 0101012015 +%s)+241*86400)) +%F
2015-08-30

date -j -f %s $(date -j -f %F 2015-01-01 +%s+241*86400 | bc) +%F
2015-08-30

其中,通过使用GNU date v8.13,我使用:

date -d "2005-1-1 +241 days" +%F
2005-08-30