require 'date' require 'when_exe' include When
標準時を日本時間にしておく
TM::Clock.local_time = '+09:00'
date = when?('2014-01-01') #=> 2014-01-01 p date.class #=> When::TM::CalDate note = CalendarNote('LunarPhases') p note.class #=> When::CalendarNote::LunarPhases p note.phase(date, 15) #=> 2014-01-16 (2014-01-01の直後の望) p note.phase(date, -15) #=> 2013-12-17 (2014-01-01の直前の望)
date = when?('2014-01-01') #=> 2014-01-01 p date.class #=> When::TM::CalDate p date.frame.class #=> When::CalendarTypes::Gregorian p date.frame.note.class #=> When::CalendarNote::Christian p date.phase(15) #=> 2014-01-16 (2014-01-01の直後の望) p date.phase(-15) #=> 2013-12-17 (2014-01-01の直前の望)
When::CalendarNote::Christianには phase メソッドがないため、代替してWhen::CalendarNote::LunarPhasesが使用される
time = when?('2014-01-01T00:00') #=> 2014-01-01T00:00+09:00 p time.class #=> When::TM::DateAndTime note = CalendarNote('LunarPhases') p note.class #=> When::CalendarNote::LunarPhases p note.phase(time) #=> 2014-01-01T20:14+09:00 (2014-01-01の直後の朔, time と同じ分解能) p note.phase(time, -30) #=> 2013-12-03T09:22+09:00 (2014-01-01の直前の朔, time と同じ分解能)
time = when?('2014-01-01T00:00') #=> 2014-01-01T00:00+09:00 p time.class #=> When::TM::DateAndTime p time.frame.class #=> When::CalendarTypes::Gregorian p time.frame.note.class #=> When::CalendarNote::Christian p time.phase #=> 2014-01-01T20:14+09:00 (2014-01-01の直後の朔, time と同じ分解能) p time.phase(-30) #=> 2013-12-03T09:22+09:00 (2014-01-01の直前の朔, time と同じ分解能)
phase メソッドの引数 0(=月の位相 0 ティティ)は省略できる
date = Date.new(2014,1,1) #=> #<Date: 2014-01-01 (4913317/2,0,2299161)> time = DateTime.new(2014,1,1) #=> #<DateTime: 2014-01-01T00:00:00+00:00 (4913317/2,0,2299161)> note = CalendarNote('LunarPhases') p note.class #=> When::CalendarNote::LunarPhases p note.phase(date) #=> 2014-01-31 p note.phase(time) #=> 2014-01-01T11:14:09.85Z
UTC の正午は朔の後のため、直後の朔は1月31日になる
require 'when_exe/core/extension' date = Date.new(2014,1,1) #=> #<Date: 2014-01-01 (4913317/2,0,2299161)> time = DateTime.new(2014,1,1) #=> #<DateTime: 2014-01-01T00:00:00+00:00 (4913317/2,0,2299161)> p date.phase #=> #<Date: 2014-01-31 (4913377/2,0,2299161)> p time.phase #=> #<DateTime: 2014-01-01T11:14:09+00:00 (70751778283/28800,0/1,2299161)>
標準時を未定義にしておく
TM::Clock.local_time = nil
date = when?('康和3.2.1') #=> 康和03(1101).02.01 p date.class #=> When::TM::CalDate p date.frame.note.class #=> When::CalendarNote::JapaneseNote p date.phase(15) #=> 康和03(1101).02.16 p date.phase(-15) #=> 康和03(1101).01.16=
When::CalendarNote::JapaneseNoteの phase メソッドが使われ、当時行用されていた宣明暦で計算が行われる
宣明暦での康和3年正月望は康和03(1101).01.16の翌朝の日の出前であるため = が付く
(= は<When.exe Standard Representation (1.日付時刻の表現)> で翌日を意味する)
[0, 7.5, 15, 22.5, 30].each do |phase| date = when?('康和3.2.1T00:00').phase(phase) p date #=> 下記 # 康和03(1101).02.01T04:33Z # 康和03(1101).02.08=T03:27Z # 康和03(1101).02.16T14:41Z # 康和03(1101).02.23T09:36Z # 康和03(1101).03.01*T19:36Z end
宣明暦での康和3年3月朔は進朔しており実際は前日であるため * が付く
(* は<When.exe Standard Representation (1.日付時刻の表現)> で前日を意味する)