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のサイトに掲載されています。(かなり多いです)
主な書式指定子を抜粋したので参考にしてください。
書式指定子 | 説明 | 例 |
---|---|---|
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); } } }
コメント