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も見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
ちょっと先の未来クイズ第6問
2025年1月2日と1月3日に行われる、第101回箱根駅伝(東京箱根間往復大学駅伝競走)で、上位3位に入賞するチームはどこでしょう?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
VBA 入力箇所指定方法
Visual Basic(VBA)
-
-
4
テキストファイルのフィールド行のみ削除したい
Visual Basic(VBA)
-
5
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
6
Vba ファイル書き込み時に書き込みエラーを回避する方法を教えてください
Visual Basic(VBA)
-
7
pdfファイルの複数添付 引数の型
Visual Basic(VBA)
-
8
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
9
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
10
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
11
VBA 2次元配列の出力
Visual Basic(VBA)
-
12
VBAのループ処理について教えてください
Visual Basic(VBA)
-
13
(マクロ)値を返す時は subでもfunctionでもどちらでも良いのでしょうか?
Excel(エクセル)
-
14
VBA 最終行の取得がうまくいかず上書きされてしまいます。
Visual Basic(VBA)
-
15
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
16
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
17
Vba エラーコード2147xxxxxxについて教えてください
Visual Basic(VBA)
-
18
エクセルVBA
Visual Basic(VBA)
-
19
VBAなくなるの?
Visual Basic(VBA)
-
20
VBA一覧取得 再投稿
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】5万行以上のデー...
-
Excel VBA 選択範囲の罫線色の...
-
2つのマクロでチェックボックス...
-
VBA 最終行の取得がうまくいか...
-
vbaにてseleniumを使用したedge...
-
Excel VBA 定義されたプロージ...
-
ExcelVBA シート名を複数セルか...
-
VB.net 文字列から日付型へ変更...
-
【VBA】 結合セルに複数画像と...
-
Web画面の文字をVB6で取得したい
-
【ExcelVBA】値を変更しながら...
-
[VB.net] ボタン(Flat)のEnable...
-
現在のブックを閉じないで、マ...
-
ExcelのVBAコードについて教え...
-
【VBA】値を変更しながら連続で...
-
エクセルのマクロについて教え...
-
VBA 円グラフ 特定条件に一致し...
-
【ExcelVBA】値を変更しながら...
-
VBA ユーザーフォーム ボタンク...
-
IEを使わないでhtmlテキストを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAについて教えて下さい
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
【ExcelVBA】5万行以上のデー...
-
VBA Application.Matchについて...
-
Excelのマクロについて教えてく...
-
Excel VBAについて。こんな動作...
-
Excelの数式について教えてくだ...
-
ExcelのVBAコードについて教え...
-
VBA 同じフォルダ内のすべての...
-
不要項目の行削除方法について
-
Vba 型が一致しません(エラー1...
-
【マクロ】オートフィルターに...
-
【VBA】 結合セルに複数画像と...
-
VBAで特定の文字が入った行をコ...
-
ExcelのVBAコードについて教え...
-
VBAでセルの書式を変えずに文字...
-
VBAのエラー表示の対処法について
-
Excelのマクロについて教えてく...
-
Excel マクロについて詳しい方...
おすすめ情報
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でしょうか。