[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】"文字列は有効な DateTime ではありませんでした"がParseExactで発生する



更新日:2020/08/20


文字列は有効な DateTime ではありませんでした



Windows 10 Powershell において、文字列、日付変換関数である [DateTime]::ParseExact を使用としたところ以下のエラーが発生しました。
以下の例では文字列である "2020-01-01T13:00:00"をDateTime型に変換しようとしていますが、"このエラーで失敗しています。


PS C:\> [DateTime]::ParseExact("2020-01-01T13:00:00","yyyy-MM-ddThh:mm:ss", $null)
"3" 個の引数を指定して "ParseExact" を呼び出し中に例外が発生しました: "文字列は有効な DateTime ではありませんでした。"
発生場所 行:1 文字:1
+ [DateTime]::ParseExact("2020-01-01T13:00:00","yyyy-MM-ddThh:mm:ss", $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException





原因


format で時間を表す hh を使用していますが、これは 00 〜 12 が範囲となります。よって例のように 13 を当てはめるとエラーとなります。

対処


hh ではなく HH を使用します。これでエラーは出力されることなく String が DateTime に変換されます。



PS C:\> [DateTime]::ParseExact("2020-01-01T13:00:00","yyyy-MM-ddTHH:mm:ss", $null)

2020年1月1日 13:00:00




参考:書式文字列


以下のような文字列を使用します。

yyyy 年を4桁で
yy 年を2桁で
MM 月を2桁で
dd 日を2桁で
HH 時間を2桁で(0〜23)
hh 時間を2桁で(0〜12)
mm 分を2桁で
ss 秒を2桁で






[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018