ひとりも見捨てないことを、あきらめない

学校教育、社会教育、数学、技術家庭科、Youtube、EdTech、ICT、プログラミング、その他

日付を「普通の数字」に変更する  01/12 日

 C# になって、日付のシリアル値が、あまりはっきりしなくなったように思います。つまり、歴史上のある年月日、時分を基準として、そこから何秒後という数字を、「一意的に表すような関数」を、誰かが標準的に決めるということをしなくなったように思います。

 日時については、DateTime というクラスで表現することになっているのですが、したがって、この DateTime から普通の数値に変換することが、なかなか難しくなりました。なにしろ、標準的な関数のなかには、そのような関数はありません。

 とは言うものの、そういう関数がないということは、皆さんは、あまりそういう関数を必要としていないのだろうなあと感じています。

 ところが、データベースを使うとなると、ちょっと事情が変わります。特に、私が普段使っているのは、SQLite というデータベースなので、できれば「普通の数値」に変更した方が記録しやすいと思います。

 あれこれ探して、次のような方法なら、実用になりそうだと思う方法を見つけたので、メモしておきます。

 まず、基準となる日時を自分で決めておきます。以下の例では、2000年1月1日の午前0時を基準にしました。現在の時刻は、DateTime 型の関数で、

    DateTime.Now

という形で取得できます。この DateTime 型の数値を、普通の数値(2000年1月1日午前0時からの秒数)に変換することが目的です。具体的には、次のようになります。

    DateTime kako, ima;
    int second;
    kako = DateTime.Parse("2000/1/1");
    ima = DateTime.Now;
    second = (int)(ima - kako).TotalSeconds;

 また、秒数から現在の数値に変更するには、次のようにします。変更したものを表示するために、メッセージボックスを利用しています。

    int kako, ima, second;
    second = 600000000; // 2000年1月1日から6億秒後
    kako = DateTime.Parse("2000/1/1");
    DateTime ima = kako.AddSeconds(second);
    MessageBox.Show(ima.ToString(),"現在時刻");

以下の図のように、2000年1月1日から6億秒後は、2019年1月5日の午前10時40分になります。

f:id:takase_hiroyuki:20200112214655p:plain

ちなみに、2001年1月1日午前0時から6億秒後は、

f:id:takase_hiroyuki:20200112215009p:plain

です。つい、最近ですね。