C#:時刻をミリ秒まで表示する

時刻をミリ秒まで表示するアイキャッチ用画像 C#

C#のDateTime構造体のDateTime.Nowを使うと簡単に現在時刻の情報を取り出せます。
DateTime.Nowをそのまま表示すると

Console.WriteLine(DateTime.Now);

2018/02/23 10:26:24

といった感じで、年月日および時分秒までしか表示されません。

保持されている情報は実際もっとあります。
例えばミリ秒は、DateTime構造体のプロパティMillisecondを使えば簡単に取り出せます。

DateTime now = DateTime.Now;
Console.WriteLine(now.Millisecond+"ミリ秒");

897ミリ秒

ミリ秒だけ個別に取り出す場合は、以上で終わりです(笑)

この記事では、C#のWindowsフォーム用いDateTime構造体で取得した日時を年月日、曜日、時分秒、ミリ秒までを整形して表示してみます。整形には、String.Formatメソッドを使います。

実行イメージ
時刻をミリ秒まで表示する実行イメージの画像

プロジェクトの準備

ファイル >新規作成 >プロジェクト… からWindowsフォームアプリケーションを選択してください。

プロジェクト名は時刻をミリ秒まで表示するとしておきます。

フォームにラベルを2つ貼り付けてください。

時刻をミリ秒まで表示するデザイン画面の画像

label1にDateTime.Nowの値をそのまま、label2には、DateTime.Nowを整形した値を表示してみます。
準備は以上です。

現在の日時をそのまま表示してみる

コンピュータに設定されている現在時刻を取得するにはDateTime構造体のNowプロパティを使います。

フォームの何もないところをダブルクリックしてフォームロードイベントを表示させます。
コードは全てフォームロードイベント内に記述してください。

label1にDateTime.Nowプロパティをそのまま表示させてみます。

// 現在時刻を取得
DateTime t = DateTime.Now;
// そのまま表示
label1.Text = t.ToString();

表示結果

2018/02/23 10:26:24

曜日情報はなく、秒までの表示となっています。

しかしDateTime.Nowにはもっと多くの情報が入っています。
次は、label2にDateTime.Nowで取得した情報を整形しつつ更に詳しく表示してみます。

DateTime構造体の日付情報を整形して表示してみる

整形には、String.Formatメソッドを用います。

String.Formatの基本的な記述は、

String.Format("aは{0} bは{1}", a, b);

のような形です。書式{0}{1}には対応する変数の値(上記の場合、aとb)がそれぞれ代入されて表示されます。
a = 10, b = 20が代入されていた場合は、

aは10 bは20

と表示されます。
単純な変数表示の場合は、C言語のprintf関数に近い使い方かもしれません。
日付の書式指定子というものがあり、今回のように日付データの中から特定の情報を特定のフォーマットで表示したいときに威力を発揮します。

label2の記述を以下のようにします。

label2.Text = String.Format("{0:yyyy年MM月dd日(ddd) HH時mm分ss秒fff}", t);

すると年月日、曜日、時分秒、ミリ秒の表示はこうなります。

2018年02月23日(金) 9時31分52秒687

DateTime.Nowにはない曜日やミリ秒も表示されているのがわかると思います。

詳しくは、MSDNのサイトに掲載されています。(かなり多いです)

DateTimeプロパティ – MSDN

主な書式指定子を抜粋したので参考にしてください。

書式指定子 説明
yyyy 年 (4 桁の数値) 2018
yy 年 (00 ~ 99) 18
MM 月 (01 ~ 12) 02
M 月 (1 ~ 12) 2
dd 月の日にち (01 ~ 31) 09
d 月の日にち (1 ~ 31) 9
ddd 曜日の省略名
dddd 曜日の完全名 金曜日
HH 24 時間形式の時間 (00 ~ 23) 15
mm 分 (00 ~ 59) 23
ss 秒 (00 ~ 59) 08
fff 日時値の秒部分の 1/1000(ミリ秒) 451
ff 日時値の秒部分の 1/100(100分の1秒) 08

今回のソースコード全体(Form1.cs)

using System;
using System.Windows.Forms;

namespace 時刻をミリ秒まで表示する
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			this.Text = this.ProductName;
			// 現在時刻を取得
			DateTime t = DateTime.Now;
			//	 そのまま表示
			label1.Text = t.ToString();
			// ミリ秒まで表示
			label2.Text = String.Format("{0:yyyy年MM月dd日(ddd) HH時mm分ss秒fff}", t);
		}
	}
}

コメント

タイトルとURLをコピーしました