
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
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
10
VBA 2次元配列の出力
Visual Basic(VBA)
-
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を探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】シートの変数へ入れ...
-
Vba Array関数について教えてく...
-
VBAでCOPYを繰り返すと、処理が...
-
Excelのマクロについて教えてく...
-
[VB.net] ボタン(Flat)のEnable...
-
VBAでユーザーフォームを指定回...
-
VBA ユーザーフォーム ボタンク...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
ExcelVBAでパワポを操作したい
-
【マクロ】モジュール変数の記...
-
算術演算子「¥」の意味について
-
VBA 入力箇所指定方法
-
エクセルの改行について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
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でしょうか。