UNIXタイムスタンプをジュリアンに変換する
-
19-08-2019 - |
質問
Unixタイムスタンプ(たとえば1232559922)からユリウス日付の小数(2454853.03150)に変換するにはどうすればよいですか。
ウェブサイトを見つけました( http://aa.usno.navy.mil /data/docs/JulianDate.php )同様の計算を実行しますが、プログラムで実行する必要があります。
ソリューションは、C / C ++、python、perl、bashなどになります。
解決
Unixエポック(ゼロポイント)は、1970年1月1日GMTです。これは2440587.5のユリウス日に相当します
したがって、擬似コードで:
function float getJulianFromUnix( int unixSecs )
{
return ( unixSecs / 86400.0 ) + 2440587.5;
}
他のヒント
これは古い投稿であることは知っていますが、ただ言います...
Jason Cohenの回答は、コンバージョンの近似値です。
1日の秒数に関連する問題があります。 1日の長さは正確に86400秒ではなく、さまざまな観察可能な標準との時間の同期を保つために、定期的に秒が追加されます。これらは、うるう秒と呼ばれます( https://en.wikipedia.org/wiki/Leap_second )。 UTCに1秒以内に保つために、うるう秒がUTCに追加されます。
1970年1月1日から時間が経過するにつれて、上記の単純な変換では<!> quot;実際の観測可能時間からより多くのエラーが発生することは理にかなっています。 1972年から2013年の間に25うるう秒が追加されました。
ユリウス日数の美しさとシンプルさの一部は、日付文字列をまったく表さないことです。 POSIX時間はPOSIXエポック以降のミリ秒の連続カウントであるのと同様に、それらはジュリアンエポックの開始からの経過時間のカウントにすぎません。存在する唯一の問題は、ユリウス日数をローカライズされた日付文字列にマップしようとした場合です。
1分以内(2013年)の正確な日付文字列が必要な場合は、うるう秒に対応できるアルゴリズムが必要になります。
Unix タイムスタンプをジュリアンに変換するJavaScriptコードを次に示します。もともとは現在の日付と時刻を表示していますが、あなたの質問への答えは少し変更するだけです:
function computeJulianDate(DD,MM,YY,HR,MN,SC) {
with (Math) {
HR = HR + (MN / 60) + (SC/3600);
GGG = 1;
if (YY <= 1585) GGG = 0;
JD = -1 * floor(7 * (floor((MM + 9) / 12) + YY) / 4);
S = 1;
if ((MM - 9)<0) S=-1;
A = abs(MM - 9);
J1 = floor(YY + S * floor(A / 7));
J1 = -1 * floor((floor(J1 / 100) + 1) * 3 / 4);
JD = JD + floor(275 * MM / 9) + DD + (GGG * J1);
JD = JD + 1721027 + 2 * GGG + 367 * YY - 0.5;
JD = JD + (HR / 24);
}
return JD;
}
function getUTCDateTimeOrJD(now,jd=0) {
var hours = now.getUTCHours();
var minutes = now.getUTCMinutes();
var seconds = now.getUTCSeconds()
var month = now.getUTCMonth() + 1;
var day = now.getUTCDate();
var year = now.getUTCFullYear();
if (jd==1)
return computeJulianDate(month, day, year, hours, minutes, seconds);
else
return day+". "+month+". "+year+". "+hours+":"+minutes+":"+seconds;
}
var unixTime = 1473294606;
getUTCDateTimeOrJD(new Date(unixTime*1000));
getUTCDateTimeOrJD(new Date(unixTime*1000),1);