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



【Powershell】文字列を日付時刻(DateTime)に変換するサンプルプログラム5選



更新日:2020/08/20


文字列を日付に変換する


このページではPowershell 環境において String (文字列) 型の文字列を Datetime (時間) 変換するサンプルプログラムを紹介します。

基本的な方法は以下の通りでとても簡単です。
文字列を日付、時刻型の文字列に変換します。そしてそれを DateTime型 にキャストします。これで変換が完了します。
キャストする前にフォーマットするにはParseExactを使うと便利です。

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

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

サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。


次のサンプルは基本形です。yyyyMMddで年月日を表して変換します。
指定していない時間、分、秒は 0:00:00 に変換されるようです。


サンプルコード:


[DateTime]::ParseExact("20200820","yyyyMMdd", $null)


実行結果:


2020年8月20日 0:00:00








次のサンプルではハイフン付きの日付を表す文字列を DateTime 型に変換しています。$tmp に結果を代入しています。


サンプルコード:


$tmp = [DateTime]::ParseExact("2020-08-20","yyyy-MM-dd", $null);

write-host $tmp

実行結果:

2020/08/20 0:00:00





次のサンプルではハイフン付きの日付を表す文字列及びコロン付きの時間を DateTime 型に変換しています。$tmp に結果を代入しています。
HHをhhにすると00〜12が範囲となるため、本例のように 13 を指定すると "3" 個の引数を指定して "ParseExact" を呼び出し中に例外が発生しました: "文字列は有効な DateTime ではありませんでした。" エラーとなります。注意してください。

サンプルコード:


$tmp = [DateTime]::ParseExact("2020-08-20 13:05:59","yyyy-MM-dd HH:mm:ss", $null);

write-host $tmp


実行結果:

2020/08/20 13:05:59





次の例は区切りのハイフン、スラッシュ、コロン無しで日付、時刻を表示した場合です。この書式もプログラムによってはよく使うと思います。


サンプルコード:

[DateTime]::ParseExact("20200820130558", "yyyyMMddHHmmss", $null)

実行結果:


2020年8月20日 13:05:58





次の例はエラーの例です。ParseExactでフォーマットが正しくない場合にこのエラーとなります。
次の例では文字が1個欠落していました。

【誤】
2020082013055

【正】
20200820130559


サンプルコード:

[DateTime]::ParseExact("2020082013055", "yyyyMMddHHmmss", $null)

実行結果:

"3" 個の引数を指定して "ParseExact" を呼び出し中に例外が発生しました: "文字列は有効な DateTime ではありませんでした。"
発生場所 C:\temp\code.ps1:1 文字:1
+ [DateTime]::ParseExact("2020082013055", "yyyyMMddHHmmss", $null)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException




次の例では時刻のみ指定しています。時刻は正しく変換されました。日付はこのプログラムの実行日時が自動で設定されました。(プログラムの実行日時は2020年8月20日)

サンプルコード:

[DateTime]::ParseExact("130558", "HHmmss", $null)

実行結果:


2020年8月20日 13:05:58



以下の例では逆にDateTime 型を String 型に変換するサンプルプログラムです。
DateTime型をToString で文字列に変換しています。


サンプルコード:


$tmp = [DateTime]::ParseExact("2020-08-20 13:05:59","yyyy-MM-dd HH:mm:ss", $null);

write-host $tmp
$tmp.GetType()

$tmp = $tmp.ToString("yyyy-MM-dd HH:mm:ss.fff")

write-host "--------------------------------"
write-host $tmp
$tmp.GetType()


実行結果:

2020/08/20 13:05:59

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DateTime System.ValueType
--------------------------------
2020-08-20 13:05:59.000
True True String System.Object










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


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