C# で DateTime とユリウス日の変換(修正ユリウス日の処理追加版)
http://alisaka123.blog.fc2.com/blog-entry-1.html で書いたけど、プログラム関係はこっちで書いていくことに。はてなさんはコードの色分けとかできるし。修正ユリウス日の変換も追加してみました。
おかしい所があったら指摘していただけると嬉しいです。
Chronological Julian Day って日本語でなんて呼ぶんでしょう?
“ユリウス通日 - Wikipedia” http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E9%80%9A%E6%97%A5
using System; class JulianDay { private const long DayOfTicks = 864000000000; // 一日は 864000000000 Ticks private const double FirstDayOfJulianDay = 1721425.5; // 西暦1年1月1日0時0分0秒はユリウス日で 1721425.5 private const double ModifiedValue = 2400000.5; // 修正ユリウス日の補正値 // ユリウス日 // ユリウス日から DateTime に変換 static DateTime JulianDayToDateTime(double julianDay) { return (new DateTime((long) ( (julianDay - FirstDayOfJulianDay) * DayOfTicks ))); } // DateTime からユリウス日に変換 static double DateTimeToJulianDay(DateTime dateTime) { return ((dateTime.Ticks + ( FirstDayOfJulianDay * DayOfTicks )) / DayOfTicks); } // 修正ユリウス日 // 修正ユリウス日から DateTime に変換 static DateTime ModifiedJulianDayToDateTime(double julianDay) { return (JulianDayToDateTime(julianDay + ModifiedValue)); } // DateTime から修正ユリウス日に変換 static double DateTimeToModifiedJulianDay(DateTime dateTime) { return ( DateTimeToJulianDay(dateTime) - ModifiedValue ); } // Chronological Julian Day // Chronological Julian Day から DateTime に変換 static DateTime ChronologicalJulianDayToDateTime(double julianDay) { return (JulianDayToDateTime(julianDay - 0.5)); } // DateTime から Chronological Julian Day に変換 static double DateTimeToChronologicalJulianDay(DateTime dateTime) { return ( DateTimeToJulianDay(dateTime) + 0.5 ); } public static void Main(string[] args) { DateTime now = DateTime.Now; Console.WriteLine("{0:yyyy/M/d H:m:s:fff} をユリウス日で表すと {1} です。", now, DateTimeToJulianDay(now)); Console.WriteLine("{0:yyyy/M/d H:m:s:fff} を修正ユリウス日で表すと {1} です。", now, DateTimeToModifiedJulianDay(now)); Console.WriteLine("{0:yyyy/M/d H:m:s:fff} を Chronological Julian Day で表すと {1} です。", now, DateTimeToChronologicalJulianDay(now)); Console.WriteLine("何かキーを押してください. . ."); Console.ReadKey(true); } }