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

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

新規登録して質問してみよう
ただいま回答率
85.35%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

VB.NET

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

Q&A

解決済

2回答

3658閲覧

Datetime.parseについて

tanchiki

総合スコア5

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

VB.NET

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

0グッド

0クリップ

投稿2020/04/08 13:23

編集2020/04/09 02:24

前提・実現したいこと

修正依頼があったので、修正させて頂きます。

作っているのはwindows fromだとおもいます。
そこら辺よくわからず改修しています。

テキストボックスに入力された文字列(取得方法はMe.xxx.text)に対して

1."yyyy/MM/dd"の形に整形して表示する
2.DateTime型の変数に対して入力された日付を格納する

テキストボックスの値はIsDateでチェック済みです。

■VB.net(ためしてみたこと)

date1 = Datetime.parse(テキストボックスの値)
念のためこちらに変更
IF Datetime.TryParse(me.xxx.text,date1) = False then
の処理も加えたいと思います。

よろしくお願いします。

開発環境(OS:windows10, .NET, Visual Studio 2019)

-----編集前--------------------
現在VB6.0からVB.netに修正をおこなっています。VB.NETではformat関数を使わずに以下を実装したいです。
このやり方が最適なのかお答えして頂けたら幸いです。

■VB6.0
Dim date1 As Date
※テキストボックスの値は2017/05/01または2017/5/1

date1 = Cdate(format(テキストボックスの値,"yyyy/mm/dd")

■VB.net(ためしてみたこと)

date1 = Datetime.parse(テキストボックスの値)

不安点としては"yyyy/mm/dd"に変換できてないという点です。

お手数ですが、よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/04/08 22:51

質問が理解できません。分かるように書き直してください。 DateTime 型を書式設定して文字列 ( String 型) に変換したい? gentaro さんの回答にベストアンサーを付けているからそうかと思ったら、それに対するコメントを見ると違う? ユーザー入力の文字列でパースしようとすると、文字列が日付として不正だった場合はパースできない (例外がスローされる) のが問題? であれば、TryParse メソッドで対応しては?
tanchiki

2020/04/09 00:37

わかりづらくてすみません。 やりたいことはテキストボックスに入力された文字列を"yyyy/mm/dd"の形式にして、日付型に変換したいです。 その時の一番最適な方法を知りたいということになります。
退会済みユーザー

退会済みユーザー

2020/04/09 00:57 編集

そのことを質問欄を編集して追記してください。コメント欄は開かないと読めないので見ない人がいますから。 それから、 > やりたいことはテキストボックスに入力された文字列を"yyyy/mm/dd"の形式にして、 とのことですが、ユーザーがでたらめな文字を入力した場合はどうするのですか? その場合何ともならないのは当たり前ですよ。そのあたりどう考えているのかも質問欄に追記してください。
退会済みユーザー

退会済みユーザー

2020/04/09 01:01

ところで、何を作っているのでしょう? Windows Forms? WPF? ASP.NET Web アプリ? その他? テキストボックスと言っても作っているもので違うのですよ。何を作っているかも質問欄を編集して書いてください。あと、開発環境(OS, .NET, Visual Studio のバージョンなど)も書いてください。
tanchiki

2020/04/09 01:01

ご指摘ありがとうございます。 その辺りも記載して、質問を訂正します。
Q71

2020/04/09 01:08

mは分 月ならM
YAmaGNZ

2020/04/09 01:24

というか、String、DateTimeの型の違いが正確に理解できていないのではないですかね? 日付をあらわす「値」と「書式」がごっちゃになっていると思います。
tanchiki

2020/04/09 01:48

ご指摘ありがとうございます。 m→Mの修正しましたすみません、 string、Datetimeの型の違いはりかいできてるとは思いますが、書き方がわるいでしょうか。 訂正してみました。
YAmaGNZ

2020/04/09 01:49

>やりたいことはテキストボックスに入力された文字列を"yyyy/mm/dd"の形式にして、日付型に変換したいです テキストボックスに入力された文字列に対して 1."yyyy/MM/dd"の形に整形して表示する 2.DateTime型の変数に対して入力された日付を格納する という2つの処理を行いたいということでしょうか?
tanchiki

2020/04/09 01:55

そうです! そうかけばいいんですね。。 かきなおします。 ありがとうございます!
退会済みユーザー

退会済みユーザー

2020/04/09 02:18

ユーザーがでたらめな文字を入力した場合はどうするのですか? その場合何ともならないのは当たり前ですよ。そのあたりどう考えているのかも質問欄に追記してください。
gentaro

2020/04/09 02:19

よくわかんないけどクローズしたと思ったら違うんか…。 > テキストボックスに入力された文字列(取得方法はMe.xxx.text)に対して > >1."yyyy/MM/dd"の形に整形して表示する >2.DateTime型の変数に対して入力された日付を格納する > >テキストボックスの値はIsDateでチェック済みです。 とあるけど、IsDateって日付じゃなくても日付と誤認するケースがあるそうだけど、そのへんどうするんですかね。 https://takaken.tokyo/dev/isdate-trap/isdate-trap/
tanchiki

2020/04/09 02:19

IsDateでチェックしていると追記させて頂いています。
退会済みユーザー

退会済みユーザー

2020/04/09 02:28 編集

VisualBasic の IsDate ですか? それで役に立つのですかね?
tanchiki

2020/04/09 02:31

すみません、しらべてみたらそれでは不足があったので、Datetime.TryParse使います。 ご指摘ありがとうございます!
YAmaGNZ

2020/04/09 02:31

"1/3/814"や"3.1415"はDateTime.TryParseでもTrueを返します。 ですので、IsDateだけの問題でもありません。
gentaro

2020/04/09 02:32

なんか会話が成立してない。 そのIsDateの話してんのに。
退会済みユーザー

退会済みユーザー

2020/04/09 02:52 編集

windows forms textbox 日付入力 などをキーワードにググってヒットする記事を 2, 3 読んでください。それから質問を書いた方がよさそうです。 maskedtextbox 日付 などをキーワードにググるのもいいかもしれません。
tanchiki

2020/04/09 03:13

ご指摘ありがとうございます。 IsDateだけでは不足があることはりかいしました。 そして、Datetime.TryParseだけでも日付のチェックができることも理解しました。 今回の案件は改修なのでできる限り修正する箇所は少なくしたいと思っていてます。 なので、IsDateはそのままにしています。
退会済みユーザー

退会済みユーザー

2020/04/09 03:23

> 今回の案件は改修なのでできる限り修正する箇所は少なくしたいと思っていてます。 であれば、IsDate を使わないで(VB の遺産を引き継がないで)、TryParse だけを使うのがよさそうと思います。YAmaGNZ さんの回答で解決ということでよろしいのでは?
tanchiki

2020/04/09 03:27

YAmaGNZさんの方法で正しいのですが、最終的にはDatetime型として使いたいのでそちらをもう少し質問させて頂きたいとおもいます。 色々とご指摘ありがとうございます!
gentaro

2020/04/09 03:29

> 最終的にはDatetime型として使いたい それができる回答になってますが。
tanchiki

2020/04/09 03:46

そうですね、そちらで大丈夫です。 整形して表示するのところまで話がいっていたので、そちらを確認したかっただけです。 返信が頂けたら、皆様から教えてもらったことをまとめて解決とさせて頂きます。 説明が下手でご迷惑をおかけしてすみません。 色々とありがとうございました。
guest

回答2

0

ベストアンサー

1."yyyy/MM/dd"の形に整形して表示する

2.DateTime型の変数に対して入力された日付を格納する

とのことなので、
処理手順としては
1.DateTime型の変数に対して日付データを格納する
2.整形して表示する
といった手順で行うのがよろしいかと思います。

まず、DateTime型へ変換する方法ですが
挙げられているようにDatetime.parseを使う方法があります。
また、IsDateで入力された文字列が日付として認識できるか判断しているとのことですが、これらを一緒にして

VBNET

1Dim text As String = "2020/4/1" 2Dim date1 As DateTime 3 4If DateTime.TryParse(text, date1) Then 5 '日付として正しいので変換した値はdate1に格納されています。 6Else 7 '日付として正しい文字列ではありません。 8End If 9Debug.Print(text) 10

という感じでDateTime.TryParseを使用することもできます。

IsDateでの判断、TryParseでの判断ともに日付として認識される文字列はかなり幅があります。
例えば下記は全て日付として認識されます。
2020/04/01
4/1/2020
令和2年4月1日
2020 Apr 1
4/811
4.1234

もしある程度のフォーマットのみを正しい日付としたいというのであれば
DateTime.TryParseExactを利用されるのがよろしいかと思います。

整形して表示するのは上記のように日付を正常にDateTime型に変換できた場合に
そのDateTime型の変数を文字列にするのがいいかと思います。
これは、gentaroさんの回答にあるようにいろいろ方法があります。
DateTime.ToStringメソッドにて文字列に変換する。
String.Formatメソッドにて文字列に変換する
など方法があります。

投稿2020/04/09 02:29

YAmaGNZ

総合スコア10489

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

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

tanchiki

2020/04/09 03:41

回答ありがとうございます。 今回のテキストボックスの入力は2020/10/10(yyyy/MM/dd)または2020/5/5(yyyy/M/d)が日付という形にしたいと思います。 DateTime.TryParseExactでこの2つになってるか確認すればいいということでしょうか? 文字列で表示させてる必要はなく、 VB6.0で書かれてるような処理をVB.netではどうやったら実装できるのかがしりたかったのです。 ■VB6.0 Dim date1 As Date ※テキストボックスの値は2017/05/01または2017/5/1 date1 = Cdate(format(テキストボックスの値,"yyyy/mm/dd")
YAmaGNZ

2020/04/09 03:54

TryParseExactにて"yyyy/M/d"を指定すれば"2017/05/01"も"2017/5/1"も正しい日付として判断されます。 また、DateTime型に変換するだけであれば、"2017/05/01"だろが"2017/5/1"だろうが同じことです。 "2017/5/1"を"2017/05/01"に変換という考え自体がおかしいです。 また、VB6のソースですが、 format(テキストボックスの値,"yyyy/mm/dd") この部分の「テキストボックスの値」がFormat関数に渡される時に暗黙の変換でDate型に変換されている可能性があります。分解して書くとこんな感じになるのではないかと予想します。 Dim workdate As Date = CDate(テキストボックスの値) Dim workstring As String = Format(workdate,"yyyy/mm/dd") Dim date1 As Date = CDate(workstring) はっきり言って、VB6側のformat(テキストボックスの値,"yyyy/mm/dd")も無駄です。 date1 = Cdate(テキストボックスの値)と何も変わらないかと思います。
tanchiki

2020/04/09 04:00

わかりやすい回答ありがとうございます! yyyy/M/d"でどちもチェックできるんですね。 試してから質問するべきでしたね。すみません。 そうなんです、私もここの部分が必要なのか悩んでしまって質問しました。 結果いらないことがわかったので、 TryParseExactにて"yyyy/M/d"を指定するやり方にします! 本当にありがとうございました。
guest

0

不安点としては"yyyy/mm/dd"に変換できてないという点です。

ここがいまいち意味不明ですが、文字列にしたいなら書式文字列を指定して変換する方法が複数あります。
https://dobon.net/vb/dotnet/string/datetimeformat.html

投稿2020/04/08 14:04

gentaro

総合スコア8947

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

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

tanchiki

2020/04/08 14:11

回答ありがとうございます。 いえ、文字を日付に変更したいです。 こちらで問題ない、またはこのやり方が最適かが不安でしたので質問させて頂きました。 他にもっといい方法があるならば教えて頂けると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問