
No.2ベストアンサー
- 回答日時:
横からすみません。
ANo.1 に対する補足についてお答えします。
補足にある結果は、真っ当なDateTime型の変数です。
しかし、何の問題もないかといったら一概にそうとは言い切れません。
(A)
Windowsにある地域設定が日本語(日本)だから問題がないのです。
例えば、地域設定が英語(米国)にすると、FormatExceptionを発生させます。
DateTime.Parse(String)は、既定のカルチャ情報を基に書式を解析してDateTimeにしようとするからです。
つまり、米国には和暦や年、月、日といった文字列の表現がないにも関わらず、日本固有の書式の文字列を解析しようとしてエラーとなります。
どんなWindows環境であってもエラーになることなく処理して欲しいなら、
下記のようにする必要があります。
Dim dt1 As DateTime = DateTime.Parse(warekiDate, New System.Globalization.CultureInfo("ja-JP"))
(B)
warekiDate が必ず誤りのない書式で来るのかも問題となります。
こちらも、認識不能な書式のものだとするとFormatExceptionを発生させます。
前ゼロの統一感がないことから、外部から渡ってくる情報を制御しようとしているように見受けられます。
原則アプリケーションを作り上げる時、自アプリケーションの動作の信頼性を担保するために、自アプリケーション外から受け取る情報は、誤った情報が届くことを前提として組み立てます。
これらをどのように制御するかは所属する団体やプロジェクトが有するアプリケーション開発のポリシーに従えばよいと思います。
恐らくほとんどの場合、下記のような方法を取るでしょう。
1.
(A)の方法によって、必ず日本語扱いした制御とする。
ただし、誤った書式は例外として捕捉する。
Dim warekiDate As String = "令和7年1月05日 05時00分00秒"
Try
Dim dt1 As DateTime = DateTime.Parse(warekiDate, New System.Globalization.CultureInfo("ja-JP"))
Console.WriteLine(dt1.ToString())
Catch ex As FormatException
' 書式変換できなかった時の処理
Console.WriteLine(ex.Message)
End Try
Console.ReadLine()
2.
DateTime.TryParse()を利用して、変換の妥当性を判定して処理を行う。
日本語以外のカルチャ環境のOSではアプリケーションを正しく動作させることはできない。
Dim warekiDate As String = "令和7年1月05日 05時00分00秒"
Dim dt1 As DateTime
If Not DateTime.TryParse(warekiDate, dt1) Then
' 書式変換できなかった時の処理
Return
End If
Console.WriteLine(dt1.ToString())
作成するアプリケーションを取り巻く環境を考慮の上で検討し、方法を決定するとよいでしょう。
No.1
- 回答日時:
上記メソッドでだいたい可能ですが、変則的な入力文字列がくる場合は先に正規表現を駆使する等の前処理を追加すると良いです。
> type a.vb
Imports System
Public Class Test
Public Shared Sub Main()
Console.WriteLine( DateTime.Parse( "令和7年1月05日 15時20分01秒" ) )
End Sub
End Class
> C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe a.vb
Microsoft (R) Visual Basic Compiler version 14.8.9256
for Visual Basic 2012
Copyright (c) Microsoft Corporation. All rights reserved.
This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to Visual Basic 2012, which is no longer the latest version. For compilers that support newer versions of the Visual Basic programming language, see http://go.microsoft.com/fwlink/?LinkID=533241
> .\a.exe
2025/01/05 15:20:01
>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
算術演算子「¥」の意味について
Visual Basic(VBA)
-
-
4
VBAの「To」という語句について
Visual Basic(VBA)
-
5
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
6
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
7
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
8
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
9
VBA 2次元配列の出力
Visual Basic(VBA)
-
10
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
11
VBAのループ処理について教えてください
Visual Basic(VBA)
-
12
C言語 関数、変数の宣言について
C言語・C++・C#
-
13
【マクロ】モジュール変数の記述時、Callにて、呼び出されたプロシージャから実行するとエラーとなる?
Visual Basic(VBA)
-
14
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
15
エクセルvbaの対象セルに色をつける 例えば a日付 b種類 c値段 dその他 にんじん 50 ぴー
Visual Basic(VBA)
-
16
C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
17
C# で 数式文字列処理を処理する方法
C言語・C++・C#
-
18
Vba エラーコード2147xxxxxxについて教えてください
Visual Basic(VBA)
-
19
VBA 最終行の取得がうまくいかず上書きされてしまいます。
Visual Basic(VBA)
-
20
C言語について(初心者)
C言語・C++・C#
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のExcelファイルをマージす...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
エクセルの改行について
-
【マクロ】並び替えの範囲が、...
-
【ExcelVBA】値を変更しながら...
-
Vba FileSystemObject オブジェ...
-
VBA ユーザーフォーム ボタンク...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
[Excel VBA]特定の条件で文字を...
-
エクセルVBAのブックを開く方法...
-
Excel VBA 選択範囲の罫線色の...
-
vbsでのwebフォームへの入力制限?
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
ダブルクリックで貼り付けた画...
-
VBAの「To」という語句について
-
算術演算子「¥」の意味について
-
Excel マクロについて詳しい方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
VBAでユーザーフォームを指定回...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
改行文字「vbCrLf」とは
-
ワードの図形にマクロを登録で...
-
VBAの「To」という語句について
-
【マクロ】変数を使った、文字...
おすすめ情報
Dim warekiDate As String = "令和7年1月05日 05時00分00秒"
Dim dt1 As DateTime = DateTime.Parse(warekiDate)
MsgBox(dt1.ToString)
これメッセージボックスは "2025/01/05 5:00:00" となるのですが、
これで何の問題もないDateTimeでしょうか。