無線通信エンジニアの備忘録

無線通信だったり、ITだったり、仕事で覚えた専門知識の備忘録

PCの時刻を取得し、桁数固定で表示

PCの時刻を取得し、

MM/DD hh:mm:SS.sss
(M:月、D:日、h:時、m:分、S:秒、s:ミリ秒)

の形式で桁数を固定して表示させる方法についてまとめます。
(例 04/15 07:00:01.500)

目次

PCの時刻を取得

まず、PCの時刻を取得するには、DateTimeクラスを用いて、以下のようにコードを記述します。

// PCの現在時刻を取得
DateTime dt = DateTime.Now

次に、このDateTimeクラスのインスタンスdtから、月~ミリ秒までの各値を取り出すには、以下のようにコードを記述します。

// dtから月~ミリ秒までの各メンバ変数を取得
 int Month = dt.Month;
 int Day = dt.Day;
 int Hour = dt.Hour;
 int Minute = dt.Minute;
 int Second = dt.Second;
 int Millisecond = dt.Millisecond;

そして、以下のように記述することで簡単に時刻を表示させることができます。

// 標準出力に表示
String str = Month + "/" + Day + " " + Hour + ":" + Minute + ":" + Second + ":" + Millisecond;
Console.WriteLine(str);

・・・と思いきや、いくつか問題があります。

桁数が固定されない

冒頭で例として示した「04/15 07:00:01.500」を上記の記法で表示させると、

  4/15 7:0:1.500  

となり、10未満の値については1桁で表示されてしまいます。

ミリ秒の値が誤った値となる

ミリ秒の値が100ミリ秒以下の値の場合(例 04/15 07:00:01.005)、上記の記法で表示させると、

  4/15 7:0:1.5  
となってしまい、500ミリ秒と勘違いを招きます。

以下に、これらの問題を回避する方法を記載します。

String.PadLeft(桁数,'0');

数値文字列に対して、PadLeft(桁数,'0)を追記します。DateTimeクラスのインスタンスdtから月~ミリ秒までの値を取得し、指定桁数で表示させるには以下のようにコードを記述します。

using System;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {            
            // PCの現在時刻を取得
            DateTime dt = DateTime.Now;

            // DateTimeクラスのインスタンスから月~ミリ秒までの各メンバ変数を取得
            string Month = dt.Month.ToString().PadLeft(2, '0');
            string Day = dt.Day.ToString().PadLeft(2,'0');
            string Hour = dt.Hour.ToString().PadLeft(2, '0');
            string Minute = dt.Minute.ToString().PadLeft(2, '0');
            string Second = dt.Second.ToString().PadLeft(2, '0');
            string Millisecond = dt.Millisecond.ToString().PadLeft(3, '0');

            // 標準出力に表示
            string str = Month + "/" + Day + " " + Hour + ":" + Minute + ":" + Second + ":" + Millisecond;
            Console.WriteLine(str);

            Console.Write("Press Any key.");
            Console.ReadKey();
        }
    }
}

上記の記述により、実行結果は

  04/15 07:00:01.005  
となります。

int.Tostring("00")

あるいは、int型の整数をToString()で数値文字列化する際に、"00"を引数に入れます。

using System;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {            
            // PCの現在時刻を取得
            DateTime dt = DateTime.Now;

            // DateTimeクラスのインスタンスから月~ミリ秒までの各メンバ変数を取得
            string Month = dt.Month.ToString("00");
            string Day = dt.Day.ToString("00");
            string Hour = dt.Hour.ToString("00");
            string Minute = dt.Minute.ToString("00");
            string Second = dt.Second.ToString("00");
            string Millisecond = dt.Millisecond.ToString("000");

            // 標準出力に表示
            string str = Month + "/" + Day + " " + Hour + ":" + Minute + ":" + Second + ":" + Millisecond;
            Console.WriteLine(str);

            Console.Write("Press Any key.");
            Console.ReadKey();
        }
    }
}

実行結果は同じです。
こちらの方が記述するコード量が少なくて使いやすそうですね。