日本単位系です、「商単位系」と呼びます
The Japanese Unit called "Shang Unit"
日本单位制,即“商单位制”
Alpha Lab Simulang
 
こんにちは、関東の国王です、Takakuと申します。
ただいま日本単位系を作りましたよ、
(商朝が関東だから、商=Shangの単位系と言います)

http://su.x0000.net

コードは下記のとおりです
(一括ダウンロードは http://up.x0000.net/files/ShangUnit.zip

まずは日付と時間です
2018年を無政府元年にしています、
時刻のほうは、一日を10時間と分けて、
一時間を100分、1万秒と分けます。
つまり、1商秒が、0.864秒になります。

長さは、1商秒ではかった光速度の1G分の1が、1尺になりますよ。
重量、1立方尺の水の重量の十分の1が、1斤になりますけど。
また電荷の単位を1電と呼び、陽子1G個分の電荷です。
詳しくはコードを参照してください。

一方、商秒ではかったメモリの周波数と、hhd, ssdの速度は下記にて:
ddr2 667: 576;    800: 691
ddr3 1333: 1152;    1600: 1382
ddr4 2133: 1843;    2400: 2074;    2666: 2303;    3200: 2765;    4266: 3686
ddr5 4800: 4147;    6400: 5536
HDD usb 2.0: 29MB/商秒
HDD 320G 5400rpm: 44MB/商秒; 7200rpm: 58MB/商秒
HDD 500G 5400rpm: 68MB/商秒; 7200rpm: 91MB/商秒
SSD(write): 259~302MB/商秒

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Takaku.ShangUnit
{
   struct ShangDateTime
   {
       private int _Year, _Month, _Day;
       private int _Hour, _Minute, _Second, _Millisecond;

       public ShangDateTime(DateTime dateTime)
       {
           _Year = dateTime.Year - 2018 + 1; // 2018年は無政府元年
           _Month = dateTime.Month;
           _Day = dateTime.Day;

           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 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 c = 299792458.0; // m/s
       public static readonly double e = 1.6021892e-19; // C

       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 * (c * ShangSecondToSecond(1.0) / 1000000000.0); }
       public static double MeterToShaku(double meter) { return meter / (c * ShangSecondToSecond(1.0) / 1000000000.0); }

       public static double KinToKg(double kin) { return kin * (Math.Pow(ShakuToMeter(1.0), 3.0) * 1000 / 10); }
       public static double KgToKin(double kg) { return kg / (Math.Pow(ShakuToMeter(1.0), 3.0) * 1000 / 10); }

       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 * 1000000000); }
       public static double CoulombToDen(double coulomb) { return coulomb / (e * 1000000000); }

       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)); }
   }
}