質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

4回答

1559閲覧

日付への変換の仕方を教えてください。

tsugfuxr-hdudhd

総合スコア17

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/11/26 01:15

編集2018/11/26 01:47

8桁の数字を入力し2000~2050年までの日付変更可能な場合、yyyy/mm/ddを表示させたいです。
このままだとテキストボックス17になにも表示されません。
原因と解決法を教えていただけないでしょうか。

vb

1 Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click 2 3 Dim text16 As String = TextBox16.Text 4 Dim result As String = "" 5 Dim number As Integer = 0 6 7 number = CInt(text16) 8 9 If number >= 19900101 AndAlso number <= 20301231 Then 10 If IsDate(TextBox16.Text) Then 11 result = CType(Date.Parse(Format(CInt(TextBox16.Text), "0000/00/00")), String) 12 End If 13 14 End If 15 16 TextBox17.Text = result 17 18 End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

原因:
「8桁の数字がyyyymmdd形式の日付になるかどうか」は IsDate 関数では判定できないからです。

解決方法:
y_waiwai さんの回答にあるように割り算の商と余りを使って解釈するか、TextBox に入力された文字列を適当に区切って扱うか、どちらかかと思います。

入力された文字列を適当に区切る例:

vb.net

1Dim text16 As String = TextBox16.Text 2Dim result As String = "" 3 4' 入力された文字列が8文字の場合だけ処理する 5If text16.Length = 8 Then 6 ' 「年」部分(左4桁) 7 Dim yearPart = text16.Substring(0, 4) 8 ' 「月」部分(中2桁) 9 Dim monthPart = text16.Substring(4, 2) 10 ' 「日」部分(右2桁) 11 Dim dayPart = text16.Substring(6, 2) 12 ' 上記3つのパーツを連結して、yyyy/MM/dd 形式っぽくする 13 Dim dateText = yearPart & "/" & monthPart & "/" & dayPart 14 ' 3つを連結した文字列が日付として解釈可能な場合だけ処理する 15 If IsDate(dateText) Then 16 ' 3つを連結した文字列を日付に変換する 17 Dim resultDate = Date.Parse(dateText) 18 ' 変換結果の日付の年部分が2000以上2050以下の場合だけ処理する 19 If 2000 <= resultDate.Year AndAlso resultDate.Year <= 2050 20 ' 変換結果の日付を yyyy/MM/dd 形式の文字列に変換する 21 result = resultDate.ToString("yyyy/MM/dd") 22 End If 23 End If 24End If 25 26TextBox17.Text = result

投稿2018/11/26 03:32

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsugfuxr-hdudhd

2018/11/26 04:05

丁寧な回答ありがとうございました。
guest

0

すでにベストアンサーは決まっていますが別解として。

入力する文字列の形式が決まっているのであれば、DateTime.TryParseExactなどを使う手もあります。

vb

1Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click 2 Dim text16 As String = TextBox16.Text 3 4 Const AllowFormat = "yyyyMMdd" 5 Dim jpCulture As New System.Globalization.CultureInfo("ja-JP") 6 Dim dateTimeStyle = System.Globalization.DateTimeStyles.None 7 8 Dim resultDate As System.DateTime 9 If System.DateTime.TryParseExact(text16, AllowFormat, jpCulture.DateTimeFormat, dateTimeStyle, resultDate) Then 10 If #2000/1/1# <= resultDate AndAlso resultDate < #2051/1/1# Then 11 TextBox17.Text = resultDate.ToString("yyyy/MM/dd") 12 Else 13 MessageBox.Show("日付が指定範囲外です。" & resultDate.ToString()) 14 End If 15 Else 16 MessageBox.Show("日付に変換できません。") 17 End If 18 19End Sub

投稿2018/11/26 11:28

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsugfuxr-hdudhd

2018/12/03 00:06

勉強になります。 ありがとうございました。
guest

0

IsDateは日付に変換可能な書式かどうかを判定するものですから、単に日付の範囲として有効なのかを確認したい場合には、最低限日付の書式となっている必要があります。

VB

1 If IsDate(Format(CInt(TextBox16.Text), "0000/00/00")) Then

投稿2018/11/26 03:47

編集2018/11/26 03:49
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

入力した文字列を数値に変換して、

10000で割ったら西暦が出て、
100で割って100の余りを出せば月が出て、
そのまま100の余りを出せば日が出ますね

投稿2018/11/26 01:31

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問