Index 扉へ 首頁
人類の品種・宇宙人・系外銀河など
商朝の単位制です (Shang Units)
0   商湯      2026年2月5日 木 9:38
商朝 (==関東)の単位制です

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); }
   }
}
この記事は 2026年9月28日 月 20:25 に作者によって編集されました
名前      編集用パスワード(省略可)    パスワードの記憶
数式 αβγ IPA http:// 画像 B I U 上 下
(添付ファイルは http://www.jkofsp.net/up/ にアップロードしてください)