
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 和暦を西暦に変換する方法について 4 2023/03/02 20:57
- Excel(エクセル) 式の解読のお願いm(_._)m 4 2024/02/22 19:16
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- Excel(エクセル) エクセルで文字の少し変わった計を取りたい 6 2023/05/30 23:19
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/04/21 08:59
- その他(プログラミング・Web制作) 正規表現 3 2023/11/13 14:52
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/10 08:51
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
このQ&Aを見た人はこんなQ&Aも見ています
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
算術演算子「¥」の意味について
Visual Basic(VBA)
-
-
4
VBAの「To」という語句について
Visual Basic(VBA)
-
5
VBA 入力箇所指定方法
Visual Basic(VBA)
-
6
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
7
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
8
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
9
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
10
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
11
VBA 2次元配列の出力
Visual Basic(VBA)
-
12
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
13
VBAのループ処理について教えてください
Visual Basic(VBA)
-
14
C言語 関数、変数の宣言について
C言語・C++・C#
-
15
【マクロ】モジュール変数の記述時、Callにて、呼び出されたプロシージャから実行するとエラーとなる?
Visual Basic(VBA)
-
16
pdfファイルの複数添付 引数の型
Visual Basic(VBA)
-
17
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
18
VBA初心者です。次のVBAコードで、17行目を削除したいのですがうまく動きません 改善策を教えてく
Visual Basic(VBA)
-
19
Excelの計算が合いません。 諸事情で会計の簡素な購入・販売諸元表を作っているのですが、一つの項目
Excel(エクセル)
-
20
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】5万行以上のデー...
-
2つのマクロでチェックボックス...
-
vbsでのwebフォームへの入力制限?
-
VBAでCOPYを繰り返すと、処理が...
-
Excel 範囲指定スクショについ...
-
Vba セルの4辺について罫線が有...
-
[VB.net] ボタン(Flat)のEnable...
-
Web画面の文字をVB6で取得したい
-
VBAでセルの書式を変えずに文字...
-
以下のプログラムの実行結果は...
-
エクセルでCDOを使ったメール送...
-
vbaにてseleniumを使用したedge...
-
VBA ユーザーフォーム ボタンク...
-
ExcelVBAでパワポを操作したい
-
VBA 入力箇所指定方法
-
エクセルの改行について
-
testファイル内にある複数のpng...
-
Excelマクロで使うVBAコードを...
-
VBAでFOR NEXT分を Application...
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロVBAについて、コードを教...
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
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でしょうか。