Skip to content

Instantly share code, notes, and snippets.

@komasaru
Last active April 19, 2018 06:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save komasaru/5d2d3790cf511b719af675211901ae06 to your computer and use it in GitHub Desktop.
Save komasaru/5d2d3790cf511b719af675211901ae06 to your computer and use it in GitHub Desktop.
Ruby script to calculate a Japan's calendar with a selfmade gem library, using JPL DE430.
#! /usr/local/bin/ruby
# coding: utf-8
#---------------------------------------------------------------------------------
#= カレンダー
# : 自作 RubyGems ライブラリ MkCalJpl を使用
# ( 高野氏のプログラムを改良した MkCalendar を、 JPL DE430 から正確な位置データを
# 取得して計算するようさらに改良したもの )
#
# date name version
# 2016.09.17 mk-mode.com 1.00 新規作成
#
# Copyright(C) 2016 mk-mode.com All Rights Reserved.
#---------------------------------------------------------------------------------
# 引数 : JST(日本標準時)
# 書式:YYYYMMDD
# 無指定なら現在(システム日時)と判断。
#---------------------------------------------------------------------------------
#++
require 'date'
require 'mk_cal_jpl'
class CalJpl
USAGE = "[USAGE] .cal_jpl.rb [YYYYMMDD]"
MSG_ERR = "[ERROR] Invalid date!"
BIN_PATH = "/path/to/JPLEPH"
def initialize
@date = ARGV.shift
@date ||= Time.now.strftime("%Y%m%d")
unless @date =~ /\d{8}/
puts USAGE
exit 0
end
unless Date.valid_date?(@date[0,4].to_i, @date[4,2].to_i, @date[6,2].to_i)
puts MSG_ERR
exit 0
end
end
def calc
@obj = MkCalJpl.new(BIN_PATH, @date)
oc = @obj.oc
str = sprintf("%04d-%02d-%02d", @obj.year, @obj.month, @obj.day)
str << " #{@obj.yobi}曜日"
str << " #{@obj.holiday}" unless @obj.holiday == ""
str << " #{@obj.jd}UTC(#{@obj.jd_jst}JST) #{@obj.kanshi} "
str << sprintf("%04d-%02d-%02d", oc[0], oc[2], oc[3])
str << "(閏)" if oc[1] == 1
str << " #{oc[4]}"
str << " #{@obj.sekki_24}" unless @obj.sekki_24 == ""
str << " #{@obj.zassetsu}" unless @obj.zassetsu == ""
str << " #{@obj.sekku}" unless @obj.sekku == ""
str << " #{@obj.lambda} #{@obj.alpha} #{@obj.moonage}"
puts str
# ついでに、黄経(月、太陽)から月相を計算
# diff = @obj.alpha - @obj.lambda
# diff += 360 if diff < 0
# moonphase = (diff / 360.0 * 28).round
# puts "\n月相: #{moonphase}"
rescue => e
$stderr.puts "[#{e.class}] #{e.message}"
e.backtrace.each { |tr| $stderr.puts "\t#{tr}"}
exit 1
end
end
CalJpl.new.calc if __FILE__ == $0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment