| 商朝の単位制です (Shang Units) |
|---|
|
商朝 (==関東)の単位制です
この記事は 2026年9月28日 月 20:25 に作者によって編集されましたDownload source files: http://www.jkofsp.net/files/ 商朝の時計のソフトです http://www.jkofsp.net/bbs/topic.aspx?id=345-0 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Takaku.ShangUnit { enum DayOfShangWeek { ShangSunday = 0, ShangMonday = 1, ShangTuesday = 2, ShangWednesday = 3, ShangFriday = 4, } struct ShangDateTime { private int _Year, _Month, _Day; private DayOfShangWeek _DayOfShangWeek; private int _Hour, _Minute, _Second, _Millisecond; public ShangDateTime(DateTime dateTime) { _Year = dateTime.Year; int days = 0; for (int y = 1; y < dateTime.Year; y++) // 紀元1年1月1日が日曜日 days += new DateTime(y, 12, 31).DayOfYear; days += dateTime.DayOfYear - 1; _DayOfShangWeek = (DayOfShangWeek)(days % 5); bool j = new DateTime(_Year, 12, 31).DayOfYear == 366; int d = dateTime.DayOfYear; if (d >= 1 && d <= 36+(j?1:0)) { _Month = 1; _Day = d; } else if (d >= 36+(j?1:0)+1 && d <= 36+(j?1:0)+37) { _Month = 2; _Day = d - (36+(j?1:0)); } else if (d >= 36+(j?1:0)+37+1 && d <= 36+(j?1:0)+37+36) { _Month = 3; _Day = d - (36+(j?1:0)+37); } else if (d >= 36+(j?1:0)+37+36+1 && d <= 36+(j?1:0)+37+36+37) { _Month = 4; _Day = d - (36+(j?1:0)+37+36); } else if (d >= 36+(j?1:0)+37+36+37+1 && d <= 36+(j?1:0)+37+36+37+36) { _Month = 5; _Day = d - (36+(j?1:0)+37+36+37); } else if (d >= 36+(j?1:0)+37+36+37+36+1 && d <= 36+(j?1:0)+37+36+37+36+37) { _Month = 6; _Day = d - (36+(j?1:0)+37+36+37+36);; } else if (d >= 36+(j?1:0)+37+36+37+36+37+1 && d <= 36+(j?1:0)+37+36+37+36+37+36) { _Month = 7; _Day = d - (36+(j?1:0)+37+36+37+36+37); } else if (d >= 36+(j?1:0)+37+36+37+36+37+36+1 && d <= 36+(j?1:0)+37+36+37+36+37+36+37) { _Month = 8; _Day = d - (36+(j?1:0)+37+36+37+36+37+36);; } else if (d >= 36+(j?1:0)+37+36+37+36+37+36+37+1 && d <= 36+(j?1:0)+37+36+37+36+37+36+37+36) { _Month = 9; _Day = d - (36+(j?1:0)+37+36+37+36+37+36+37); } else if (d >= 36+(j?1:0)+37+36+37+36+37+36+37+36+1 && d <= 36+(j?1:0)+37+36+37+36+37+36+37+36+37) { _Month = 10; _Day = d - (36+(j?1:0)+37+36+37+36+37+36+37+36); } else throw new Exception(); int oldMillisecond = dateTime.Hour * 60 * 60 * 1000 + dateTime.Minute * 60 * 1000 + dateTime.Second * 1000 + dateTime.Millisecond; int newMillisecond = (int)(oldMillisecond * ((1000.0 * 100 * 100 * 10) / (1000.0 * 60 * 60 * 24))); _Hour = newMillisecond / (1000 * 100 * 100); int a = newMillisecond % (1000 * 100 * 100); _Minute = a / (1000 * 100); int b = a % (1000 * 100); _Second = b / 1000; _Millisecond = b % 1000; } public int Year { get { return _Year; } } public int Month { get { return _Month; } } public int Day { get { return _Day; } } public DayOfShangWeek DayOfShangWeek { get { return _DayOfShangWeek; } } public int Hour { get { return _Hour; } } public int Minute { get { return _Minute; } } public int Second { get { return _Second; } } public int Millisecond { get { return _Millisecond; } } } struct ShangTimeSpan { private int _Days; private int _Hours, _Minutes, _Seconds, _Milliseconds; public ShangTimeSpan(TimeSpan timeSpan) { _Days = timeSpan.Days; int oldMillisecond = timeSpan.Hours * 60 * 60 * 1000 + timeSpan.Minutes * 60 * 1000 + timeSpan.Seconds * 1000 + timeSpan.Milliseconds; int newMillisecond = (int)(oldMillisecond * ((1000.0 * 100 * 100 * 10) / (1000.0 * 60 * 60 * 24))); _Hours = newMillisecond / (1000 * 100 * 100); int a = newMillisecond % (1000 * 100 * 100); _Minutes = a / (1000 * 100); int b = a % (1000 * 100); _Seconds = b / 1000; _Milliseconds = b % 1000; } public int Days { get { return _Days; } } public int Hours { get { return _Hours; } } public int Minutes { get { return _Minutes; } } public int Seconds { get { return _Seconds; } } public int Milliseconds { get { return _Milliseconds; } } } public static class Conversions { public static readonly double AU = 149597870690; //m public static readonly double e = 1.6021892e-19; // C public static double Shang_c() { return AU; } // m/ShangSecond public static double ShangSecondToSecond(double shangSecond) { return shangSecond * ((60 * 60 * 24.0) / (100 * 100 * 10.0)); } public static double SecondToShangSecond(double second) { return second * ((100 * 100 * 10.0) / (60 * 60 * 24.0)); } public static double HaToHz(double ha) { return ha * SecondToShangSecond(1.0); } public static double HzToHa(double hz) { return hz * ShangSecondToSecond(1.0); } public static double ShakuToMeter(double shaku) { return shaku * (Shang_c() / 1000000000000.0); } public static double MeterToShaku(double meter) { return meter / (Shang_c() / 1000000000000.0); } public static double KinToKg(double kin) { return kin * (Math.Pow(ShakuToMeter(1.0), 3.0) * 100); } public static double KgToKin(double kg) { return kg / (Math.Pow(ShakuToMeter(1.0), 3.0) * 100); } public static double RyokuToNewton(double ryoku) { return ryoku * (KinToKg(1.0) * ShakuToMeter(1.0) / Math.Pow(ShangSecondToSecond(1.0), 2.0)); } public static double NewtonToRyoku(double newton) { return newton / (KinToKg(1.0) * ShakuToMeter(1.0) / Math.Pow(ShangSecondToSecond(1.0), 2.0)); } public static double DenToCoulomb(double den) { return den * (e * 10000000000000000.0); } public static double CoulombToDen(double coulomb) { return coulomb / (e * 10000000000000000.0); } public static double RyuuToAmpere(double ryuu) { return ryuu * (DenToCoulomb(1.0) / ShangSecondToSecond(1.0)); } public static double AmpereToRyuu(double ampere) { return ampere / (DenToCoulomb(1.0) / ShangSecondToSecond(1.0)); } public static double NouToJoule(double nou) { return nou * (RyokuToNewton(1.0) * ShakuToMeter(1.0)); } public static double JouleToNou(double joule) { return joule / (RyokuToNewton(1.0) * ShakuToMeter(1.0)); } public static double RitsuToWatt(double ritsu) { return ritsu * (NouToJoule(1.0) / ShangSecondToSecond(1.0)); } public static double WattToRitsu(double watt) { return watt / (NouToJoule(1.0) / ShangSecondToSecond(1.0)); } public static double AtsuToVolt(double atsu) { return atsu * (NouToJoule(1.0) / DenToCoulomb(1.0)); } public static double VoltToAtsu(double volt) { return volt / (NouToJoule(1.0) / DenToCoulomb(1.0)); } public static double TeikouToOhm(double teikou) { return teikou * (AtsuToVolt(1.0) / RyuuToAmpere(1.0)); } public static double OhmToTeikou(double ohm) { return ohm / (AtsuToVolt(1.0) / RyuuToAmpere(1.0)); } public static double KakuToDo(double kaku) { return kaku * (360.0 / 400.0); } public static double DoToKaku(double _do) { return _do / (360.0 / 400.0); } } } |