日の出、日の入りの時刻を簡易計算するコード
多分、正値とは2分前後の誤差があると思います。
必要なパラメータは以下の値
年・月・日・緯度・経度
JavaScriptの場合
【年・月・日の取得】
var current_D = new Date();
var current_Year = current_D.getFullYear();
var current_Month = current_D.getMonth() + 1;
var current_Day = current_D.getDate();
【1月1日からの通し日数】
year1=current_Year;
month1=current_Month;
day1=current_Day;
year2=current_Year;
month2=1;
day2=1;
var dt1 = new Date(year1, month1 - 1, day1);
var dt2 = new Date(year2, month2 - 1, day2);
var diff = dt1 - dt2;
var Days = diff / 86400000;
【日の出・日の入りの時刻】
緯度・経度は適当な値を入れてください。
var Keido = ******;//経度
var ido = ******;//緯度
var IdoR= ido * Math.PI/180;
var Day1 = 2*Math.PI*(Days - 81.5)/365;
var Day2 = 2*Math.PI*(Days - 3)/365;
//均時差
var TimeEquation1 = -7.37*Math.sin(Day2);
var TimeEquation2 = 9.86*Math.sin(2*Day1);
var TimeEquation = TimeEquation1 + TimeEquation2;
//太陽の赤緯
var SunDeclination = 0.4082*Math.sin(Day1);
//昼間の時間
var Day_Time_min = 1440*(1-Math.acos(Math.tan(SunDeclination)*Math.tan(IdoR))/Math.PI);
//補正値
var Hosei_min = 0.8502*4/Math.sqrt(1-Math.sin(IdoR)*Math.sin(IdoR)/(Math.acos(SunDeclination)*Math.acos(SunDeclination)));
//南中
var Culmination_Time = 720 - TimeEquation + 4*(135-Keido);
//午前0時からの通し時間(分)
var Sunrise_min = Culmination_Time - Day_Time_min/2-Hosei_min;
var Sunset_min = Culmination_Time + Day_Time_min/2+Hosei_min;
//日の出の時刻
Sunrise_min = Math.ceil(Sunrise_min);
var Sunrise_ji = Math.floor(Sunrise_min / 60);
var Sunrise_hun = Sunrise_min - (Sunrise_ji*60);
//日の入りの時刻
Sunset_min = Math.ceil(Sunset_min);
var Sunset_ji = Math.floor(Sunset_min / 60);
var Sunset_hun = Sunset_min - (Sunset_ji*60);
Javaの場合(Android)
こちらのページに移動しました。
日の出、日の入り(Android版)
トップページ|
サイトマップ|
Presented By WisteriaHill