質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

3回答

3464閲覧

Powershell で csv の日付が一部しか変換されない

SUSU0703

総合スコア17

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2021/05/13 03:58

こんにちは。現在、ServiceNowという社内のデータベースから取得したcsvファイル(Data01.csv)があり、中身は以下のようになっています。
ただ、これが日付になっておらず昇順、降順で並び替えが出来ないので、

last_discovered
13/05/2021 07:13:25
18/07/2020 14:30:44
06/09/2020 00:52:09
22/07/2020 00:21:20
13/05/2021 07:40:10
21/07/2020 23:59:32
08/09/2020 00:14:33
04/03/2021 03:43:49
06/09/2020 01:02:21
06/09/2020 05:40:18
22/07/2020 00:18:40

以下のようにlast_discoveredコラムを全て日付に変換するようにしましたが、
import-csv "./Data01.csv" | % {$.last_discovered = (datetime).ToString('yyyy/dd/MM HH:mm'); $} | Export-Csv './Data02.csv' -NoTypeInformation

結果として以下のように一部のデータはOKで、それ以外はNGの状態です。
例えば3,7,8,9,10 番目は正しく日付表示になったのですが、それ以外の形式が変わらず、並び替えが出来ません。

last_discovered
13/05/2021 07:13:25
18/07/2020 14:30:44
2020/9/6 0:52
22/07/2020 00:21:20
13/05/2021 07:40:10
21/07/2020 23:59:32
2020/9/8 0:14
2021/3/4 3:43
2020/9/6 1:02
2020/9/6 5:40
22/07/2020 00:18:40

また、Powershellで実行時は、NGなデータは以下のようなエラーが出ています。
Cannot convert value "" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."
At C:\Powershell\SNow\test.ps1:27 char:43

  • ... 1.csv" | % {$_.last_discovered = (datetime).ToS ...
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    • CategoryInfo : InvalidArgument: (:) [], RuntimeException
    • FullyQualifiedErrorId : InvalidCastParseTargetInvocationWithFormatProvider

こちら、どのようにすれば全ての値を日付に変換したcsvファイルに変換できますでしょうか。
どうぞ宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Powershell

1#[datetime]($_.last_discovered)).ToString('yyyy/dd/MM HH:mm'); 2[datetime]::ParseExact($last_discovered,"dd/MM/yyyy HH:mm:ss", $null).ToString("yyyy/MM/dd HH:mm");

投稿2021/05/13 09:08

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SUSU0703

2021/05/13 10:03

Y.H.さん ありがとうございます。色々試しておりますがまだ苦戦しています。 そもそも、まず変数ではなく元データの日付数字 (13/05/2021 07:13:25)をそのまま入れてみたのですが [DateTime]::ParseExact("13/05/2021 07:13:25","dd/MMM/yyyy HH:mm:ss",$null).ToString("yyyy/MMM/dd HH:mm:ss") 以下のエラーが出ます。 Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime." At line:1 char:1 + [DateTime]::ParseExact("13/05/2021 07:13:25","dd/MMM/yyyy HH:mm:ss",$ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FormatException 試しに、月の 05 を 5 に変えただけで [DateTime]::ParseExact("13/5/2021 07:13:25","dd/MMM/yyyy HH:mm:ss",$null).ToString("yyyy/MMM/dd HH:mm:ss") ちゃんと出力されるのですが、なぜ元データの月に0が付いているだけでNGなんでしょうか?? 2021/5/13 07:13:25
SUSU0703

2021/05/13 10:05

あ、すみません。いつの間にかMMMになってましたので、MMにしたら出力できました。再度変数で試してみます
SUSU0703

2021/05/13 14:04

Exportさせるのに戸惑りましたが最終的にはうまくいきました。アドバイスありがとうございました!!
guest

0

ParseExact メソッドを使うといいでしょうね


DateTime.ParseExact メソッド (System) | Microsoft Docs

Powershell での日付変換について、情報をきれいにまとめている方がいらっしゃいました。
こちらをご参考になさるとよいかと思います。

tech.guitarrapc.cóm PowerShellで日付書式にカスタム書式パターンを指定する

投稿2021/05/13 09:06

Yoshi88

総合スコア623

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SUSU0703

2021/05/13 14:04

何とか無事出来ました。アドバイスありがとうございます!
guest

0

エラーコードの通りで「文字列が日付として解釈できません」です。

Cannot convert value "" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."

なので、入力されるデータフォーマットにあわせて、指定してやる必要があります。

単純な、エラーコードへ対処する質問になっていないのは
おそらく下記の内容から、、”正しい結果”について勘違いされているので、
混乱されているのではないでしょうか

 > 「例えば3,7,8,9,10 番目は正しく日付表示になったのですが」

質問には、表示フォーマットを指定してあるので、
つまり、 年年年年/日日/月月、と表示するよう指示してあります。

.ToString('yyyy/dd/MM HH:mm');

そこで、3行目に注目すると

入力 06/09/2020 00:52:09
出力 2020/9/6 0:52

というふうに 2020年(year) 9日(day) 6月(month)と表示されています。
これは、コンピューターの正常な処理です

しかし、CSVのデータフォーマットを見る限り、
おそらくこれは、月と日が入れ替わった解釈になっていると思います。

本当は、9月6日と出力させたいのではないでしょうか?

出力 2020/6/9 0:52

なので、現状は、意図しない、すべてNGの結果だと思います。

投稿2021/05/13 05:12

Yoshi88

総合スコア623

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SUSU0703

2021/05/13 08:33

Yoshi88さん、ありがとうございます。 目的としては、元ファイルのcsvデータを全て日付に変換して並び替えが出来ればよいのですが具体的にどこを変更すればよいでしょうか? last_discovered 13/05/2021 07:13:25 18/07/2020 14:30:44 06/09/2020 00:52:09 22/07/2020 00:21:20 13/05/2021 07:40:10 21/07/2020 23:59:32 08/09/2020 00:14:33 04/03/2021 03:43:49 06/09/2020 01:02:21 06/09/2020 05:40:18 22/07/2020 00:18:40
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問