【问题标题】:bash - how to get (current) Julian day number?bash - 如何获取(当前)儒略日数?
【发布时间】:2017-09-05 03:48:11
【问题描述】:

如何获得今天的Julian day number (JDN) 等价物?或任何日期?

我看了又看,但只发现了一些产生“year-dayOfYear”的函数,而不是:2457854。

【问题讨论】:

    标签: bash julian-date


    【解决方案1】:

    在 bash date +%j 返回朱利安日期。

    [root@TX-Serv-1 ~]# date +%j
    108
    

    此外,未来的朱利安约会也很容易。

    [root@es-host01 ~]# date --date='10 days' +%j
    119
    [root@es-host01 ~]# date --date='2 weeks' +%j
    123
    

    【讨论】:

    • “108”与 JDN 有何相似之处?请仔细阅读问题
    • 虽然它回答了错误的问题(序数日期/年份数字而不是儒略日期),但这是一个有用的小命令。这是两者之间的区别,这说明了如果您只阅读问题的标题可能会产生混淆:en.wikipedia.org/wiki/Julian_day#Terminology
    【解决方案2】:

    我最终自己移植了一个。这是SSCCE

    #!/bin/bash
    
    function GetJulianDay # year, month, day
    {
      year=$1
      month=$2
      day=$3
    
      jd=$((day - 32075 + 1461 * (year + 4800 - (14 - month) / 12) / 4 + 367 * (month - 2 + ((14 - month) / 12) * 12) / 12 - 3 * ((year + 4900 - (14 - month) / 12) / 100) / 4))
    
      echo $jd
    }
    
    function GetTodayJulianDay
    {
      year=`date +"%Y"`
      month=`date +"%m"`
      day=`date +"%d"`
    
      todayJd=$(GetJulianDay $year $month $day)
    
      echo $todayJd
    }
    
    # samples
    
    todayJd=$(GetTodayJulianDay)
    echo "got today jd: $todayJd"
    
    yesterdayJd=$(GetJulianDay 2017 4 9)
    echo "got yesterday jd: $yesterdayJd"
    

    测试一下:http://aa.usno.navy.mil/data/docs/JulianDate.php

    【讨论】:

    • A+ 用于使用 navy.mil 资源。 jpl.gov 网站也非常适合此类事情。
    【解决方案3】:

    您可以使用date +%s --date=YYYYMMDD 获取Unix 日期并将其用于compute the Julian Day from Unix date

    它最终会是这样的:

    echo $(( $(date +%s --date=YYYYMMDD) / 86400 + 2440587 ))
    

    编辑:我不知道这有多重要,但有些人喜欢在转换中添加 0.5。基本上这意味着如果您当前的日期/时间在中午之后,则转换会将儒略日期推迟 1 天。

    【讨论】:

    • 我选择了我们一直在使用的久经考验的 Java 版本。你的看起来整洁多了。有时间我会给它一个机会。
    【解决方案4】:
    OLD_JULIAN_VAR=$(date -u -d 1840-12-31 +%s)
    
    TODAY_DATE=`date --date="$odate" +"%Y-%m-%d"`
    TODAY_DATE_VAR=`date -u -d "$TODAY_DATE" +"%s"`
    export JULIAN_DATE=$((((TODAY_DATE_VAR - OLD_JULIAN_VAR))/86400))
    echo $JULIAN_DATE
    

    数学上的

    [(date in sec)-(1840-12-31 in sec)]/86400 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2022-08-16
      • 2018-04-29
      相关资源
      最近更新 更多