どうも!リョクちゃです。
今回は、タイトルの通りString型からDatetime型へ変換をする方法を紹介していきます。
文字列として与えられた2つの日付をDateTime型に変換し、どちらの日付が最新日かどうかを
判定し結果を返すといった例を交えて解説をしていきます。
ちなみに前回はこちら、
目次
日付書式(フォーマット)について
String型の日付をDateTime型へ変換していく前に、日付書式について触れていきます。
日付書式とは、
ISO 8601(1988年)では、”YYYY-MM-DD”方式(年・月・日の順番で、紀年法による西暦(CE)で年を数字4桁、月と日とを各々数字2桁で表す方式)と定められている。
とネットでは解説されています。
Yを年、Mを月、Dを日とすることで、日付を表すことができます。
YやM、Dの数によって表示のされ方も変えることができます。
例えば、YYYY-MM-DDであれば、
2020-12-19と日付を表示することができます。
以下に、一覧を記します。
No | 書式 | 詳細 |
---|---|---|
1 | d | 月の日にち 例) 1 ~ 31 |
2 | dd | 月の日にち 2桁表示 例) 01 ~ 31 |
3 | M | 月 例) 1 ~ 12 |
4 | MM | 月 2桁表示 例) 01 ~ 12 |
5 | yy | 年 末尾2桁表示 例) 00 ~ 99 |
6 | yyy | 年 3桁以上の表示 例) 001 ~ 999 |
7 | yyyy | 年 4桁表示 例) 0001 ~ 9999 |
String型からDateTime型への変換 : DateTime.Parse()
String型の日付からDateTime型に変換するには、
DateTime.Parse()を使用します。
Parseメソッドは以下の引数を渡す必要があります。
引数を渡すことで、引数をDateTime型に変換したデータを戻り値として返します。
ただし、引数として与えられたデータの書式が日付書式と一致しない場合は、
エラーとなってしまいます。
ここでいう正しい日付書式とは、
yyyy-MM-ddやyyyy/MM/ddとして日付データが表せているかになります。
yyyyMMddなら20201219となるのですが、
こちらだとParseメソッドではエラーとなります。
これらを踏まえ、コードで書くと以下のようになります。
1 2 3 |
Dim date1 As DateTime = DateTime.Parse("2020/12/19") ' 結果 ' 2020/12/19 : DateTime型 |
正しく変換できているか判定 : DateTime.TryParse()
DateTime.Parse()では、日付書式が違うとエラーになると説明をしました。
しかしながら都度エラーが出ていたら、アプリケーションにとしては使いづらいですよね。
そんな時に、正しく日付に変換できているかどうかをチェックしてくれる関数があります。
それが、DateTime.TryParse()になります。
これは以下のようにして使うことができます。
引数に文字列型の日付データとそれを変換した結果を格納する変数をそれぞれ渡します。
戻り値は、日付が正しく変換できるかどうかをチェックしたBoolean型で返されます。
正しく変換された場合は、Trueを返し、されない場合はFalseを返します。
これを使うことで、事前に変換できたかどうかのチェックをさせることができます。
踏まえて、使い方をコードで書くと以下のようになります。
1 2 3 4 5 6 7 |
Dim date As DateTime = Nothing If DateTime.TryParse("2020/12/19", date) Then ' 正しく変換できた場合の処理 Else ' 正しく変換できなかった場合の処理 End If |
それでは、例としてフォームを作成して変換について理解を深めていきます。
準備編:フォームの作成
今回は以下のようなフォームを作成します。
No | コントロール | 名前 |
---|---|---|
1 | Label | Label1 |
2 | TextBox | TextBox1 |
3 | Label | Label3 |
4 | Label | Label4 |
5 | Label | Label2 |
6 | TextBox | TextBox2 |
7 | Button | Button1 |
実行環境
筆者の実行環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。
アプリケーションの目的
日付1(TextBox1)と日付2(TextBox2)に入力された文字列型の日付をボタンを押すことで、
DateTime型に変換した後、日付1と日付2のどちらが最新の日付かを判定し、
最新の日付をLabel4に表示することを目的とします。
プログラム編
前述で紹介した変換方法を踏まえて、作成したコードがこちらになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Public Class TestDateTime Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 変数の宣言 Dim date1 As DateTime = Nothing Dim date2 As DateTime = Nothing ' 入力がされていなければ処理をしない If Me.TextBox1.Text <> "" And Me.TextBox2.Text <> "" Then ' 正しく変換されたかどうかを判定 ' DateTime.TryParse() ' 引数1 : 文字列型の日付データ ' 引数2 : 結果を格納する変数 If DateTime.TryParse(Me.TextBox1.Text, date1) And DateTime.TryParse(Me.TextBox2.Text, date2) Then ' 正しく変換されていれば処理を行う ' 日付の比較を行う If date1 > date2 Then ' date1のほうが最新 Me.Label4.Text = date1 Else ' date2のほうが最新 Me.Label4.Text = date2 End If Else ' 日付書式が違います。 MessageBox.Show("入力された日付書式が違います。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End Sub End Class |
今回は、アプリケーションの操作性等も考慮してTryParse()を使っています。
実行編
それでは実際に作成したコードを実行し、動作を確認していきます。
プログラム起動時
日付をそれぞれ入力しています。
ボタンを押し判定した結果になります。
日付書式が正しくない場合は、以下のようになります。
例えば、日付書式がそれぞれ違う場合の比較の場合
正しく判定をし、最新の日付を返してくれることが確認できます。
まとめ
Striung型からDateTime型への変換方法について、例を交えて変換の考え方や
変換に使う関数の使い方について解説をしていきました。
入力値として日付が与えられることは
開発するアプリケーションによっては頻繁に出くわすかもしれません。
そんな時に今回紹介した関数を思い出して使っていただけたらなと思います。
最後までご覧いただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。