| 1 | #!/bin/bash |
| 2 | # Desc: Prints a list of galactic tick dates |
| 3 | # Usage: ./calcGalTick.sh [int start] [int end] |
| 4 | # Input: arg1: int start index |
| 5 | # arg2: int end index |
| 6 | # Example: ./calcGalTick.sh 0 250 |
| 7 | # Depends: bc 1.07.1; date (GNU coreutils) 8.32 |
| 8 | # Version: 0.0.2 |
| 9 | # Ref/Attrib: [1] Galactic Tick Day Calendar. (2021-10-20). https://github.com/GalacticTick/GalacticTick.github.io/blob/master/documents/press-3.pdf |
| 10 | |
| 11 | # Galactic Tick duration equation (seconds) |
| 12 | ## (Earth years per galactic turn) / (100ths of arcseconds per turn) * (solar days in Earth year) |
| 13 | sGalTickEq="(225 * 10^6) / (1296000 * 100) * (365.25) * (24*3600)"; |
| 14 | #sGalTickEq="(225 * 10^6) / (1296000 * 100) * (365.24217) * (24*3600)"; |
| 15 | |
| 16 | # Galactic tick duration (seconds) |
| 17 | sGalTick="$(echo "$sGalTickEq" | bc -l)"; # 54788453.99999999999996457600 |
| 18 | #sGalTick="$(printf "%.0f" "$sGalTick")"; # round to int |
| 19 | |
| 20 | # Unix epoch of first tick (seconds; date Hans Lippershey patented the first telescope) |
| 21 | ueFirstTick="$(date --date="1608-10-02" +%s)"; |
| 22 | |
| 23 | yell() { echo "$0: $*" >&2; } # print script path and all args to stderr |
| 24 | die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status |
| 25 | must() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails |
| 26 | printGalTickDate() { |
| 27 | # Usage: printGalTickDate [int] |
| 28 | # Input: arg1: nthGalTick int n'th observance since frist Galactic Tick |
| 29 | # var: sGalTick: int Galactic tick duration |
| 30 | # var: ueFirstTick: int Unix epoch of first tick |
| 31 | # Output: str: ISO-8601 date string |
| 32 | # Example: printGalTickDate 239 |
| 33 | # 2023-09-09 |
| 34 | # Depends: bc 1.07.1; date (GNU coreutils) 8.32 |
| 35 | # Version: 0.0.1 |
| 36 | local nthGalTick output; |
| 37 | |
| 38 | # Calc Unix epoch of n'th observance since first Galactic Tick |
| 39 | ## 0th tick was first tick |
| 40 | nthGalTick="$1"; |
| 41 | ueTickEq="( $ueFirstTick + ( ($nthGalTick - 0) * $sGalTick ) )"; |
| 42 | ueTick="$( echo "$ueTickEq" | bc -l )"; |
| 43 | |
| 44 | # Print calendar date |
| 45 | #output="$(TZ=UTC date --date="@$ueTick" +%Y-%m-%dT%H:%M:%S%z)"; |
| 46 | output="$(TZ=UTC date --date="@$ueTick" +%Y-%m-%d)"; |
| 47 | |
| 48 | printf "%s\n" "$output"; |
| 49 | }; # print ISO-8601 calendar date of tick |
| 50 | main() { |
| 51 | start="$1"; |
| 52 | end="$2"; |
| 53 | for ((tick="$start"; tick<="$end"; tick++)); do |
| 54 | printf "%03d: " "$tick"; # observance number |
| 55 | printGalTickDate "$tick"; # date |
| 56 | done; |
| 57 | }; # main program |
| 58 | |
| 59 | main "$@"; |
| 60 | |
| 61 | # Author: Steven Baltakatei Sandoval |
| 62 | # License: GPLv3+ |