PowerShell CSV 파일 변환로 인한 오류를 PC 에 다른 DateTime 는 형식으로 입력 파일

0

질문

내가 사용하여 PowerShell 스크립트로 변환합니다.CSV 원시 데이터 파일 이상으로 관리할 수 있는 데이터 형식으로 별도의 열기,청소기 등입니다. 기 때문에 소스 파일과 함께 원시 데이터는 미국에서 날짜 및 시간 형식(예:11/23/21,1:00PM)다음 경우,PC 에서 같은 우리가 형식으로 전환 프로세스를 실행으로 완벽하게 해야 0 오류가 있습니다. 하지만,이하인 경우는 다른 나라에서 날짜 및 시간 형식,다음 PowerShell 오류를 보여줍니다에 빨간색이다.

면 컴퓨터에서 다른 날짜/시간 형식으로 저는 주요 오류는 다음과 같습니다.

"구문 분석"가"1"인수(s):"라는 문자열으로 인식되지 않은 유효한 날짜/시간입니다."

과 문제가 PC 이 사용됩니다 미국에서 형식(만 변경을 우리에게 형식 테스트),그래서 수 있는 누군가가 여기에 나를 도와 주시를 추가하는 변환 프로세스를 구문을하거나 문장에 의해 간단히 지정 코드에서 직접 고정된 형식으로 유지하는 정적 출력 형식에 대해 독립적으로 PC 의 시계의 날짜 및 시간 형식,그리고 경우에 한 개의 입력으로 파일은"11/23/21,1:00"다음을 지정 코드에서 당신이 원하는 형식으로 출력한"dd-MMM-yyyy hh:mm" 하는 결과 같이"23-Nov-2021 년 01:00"

코드 섹션에서 스크립트에 사용되는 변환은:

…
$data = $csvData | ? {$_ -match "\(DTRE"}

dtreFileData = New-Object System.Collections.Generic.List[PSCustomObject]

foreach ($item in $data)
{
  $null = $item.Strategy -match "\(DTRE\|(.*)\)"
  $v = $Matches[1] -split '\|'

  $resultvalue = $v[0] | Convert-CurrencyStringToDecimal
  $expectedvalue = $v[1] | Convert-CurrencyStringToDecimal

  $dtreData = [PSCustomObject]@{
    'DateTime' = ([datetime]::Parse($item.'Date/Time'))
    'ResultValue' = [decimal]$resultvalue
    'ExpectedValue' = [decimal]$expectedvalue
    }
  
  $null = $dtreFileData.Add($dtreData)
  $null = $dtreAllData.Add($dtreData)
}

$dtreFileData | Export-Csv -Path (Join-Path (Split-Path -Path $f -Parent) ($outFile + '.csv')) -Force -NoTypeInformation -Encoding ASCII
…

를 들어의 소스 데이터(csv 파일에 수십 개의 라인과 같은 다음 중 하나):

...(DTRE|49.0|48.2);...;11/23/21, 12:58 다;

...(DTRE|52.1|52.0);...;11/23/21, 1:00 다;

...

...

그리고 출력은 다음과 같:

enter image description here

내가 함께 노력 DateTime 예를 다른 게시물에 여기에서(stackoverflow.com)코드를 조정 작업에서는 컴퓨터는 우리는 날짜와 시간 형식과를 얻을 수 DateTime 형식으로 결과는 설명이다. 예제는 다음과 같:

'DateTime' = ([datetime]::Parse($item.'yyyy-MM-dd:HH:mm:ss'))

'DateTime' = ([datetime]::ParseExact($item.'yyyy-MM-dd:HH:mm:ss'))

…
$culture = [Globalization.CultureInfo]::InvariantCulture
…
  'DateTime' = ([datetime]::ParseExact($item.'yyyy-MM-dd:HH:mm:ss', $culture))
…

그러나 이러한 예 PowerShell 보여줍 오류가"수 없는 바인딩을 인수를 매개 변수는'InputObject'기 때문에 null"

한 후 업데이트로부터의 응답@Seth:

하려고 할 때 다음의 수정 코드와 PC 시스템 날짜 형식에서"24-Nov-21"및 나머지 부분은 위와 같:

…
$resultvalue = $v[0] | Convert-CurrencyStringToDecimal
$expectedvalue = $v[1] | Convert-CurrencyStringToDecimal
$cultureInfo= New-Object System.Globalization.CultureInfo("es-ES")

$dtreData = [PSCustomObject]@{
  'DateTime' = ([System.DateTime]::Parse($item.'Date/Time', $cultureInfo))
  'ResultValue' = [decimal]$resultvalue
  'ExpectedValue' = [decimal]$expectedvalue
…

그런 다음,PowerShell 보여줍니다 다음에 오류가 있습니다: enter image description here

datetime powershell
2021-11-23 21:14:34
1

최고의 응답

1

으로 설명되었다 그것은 좋은 아이디어를 해결 CSV 더 나은 dateformat. 예를 들어 ISO8601 함께 사용될 수 있는 Get-Date -Format "o".

는 말 을 얻-날짜 에 의존 C#에서 물건을 배경입니다. 그래서 사용할 수 있습 C#을 읽는 코드 에서는 특히 문화. 당신이 원산지를 알고 문화를 이 작업해야 합니다. 고정 타임 스탬프가 여전히 더 좋은 생각이 아니다.

$cultureInfo= New-Object System.Globalization.CultureInfo("en-US")
$dateString = "11/23/21, 12:58 PM";
$dateTime = [System.DateTime]::Parse($dateString, $cultureInfo);
Get-Date -Format "o" $dateTime

이 예제 코드에 당신은 할당 $dateString 의 가치 $item.' Date/Time' 그 결과는 당신이 원하는 것의 결과이 Get-Date. 그래서 당신이 할당 $dtreData.'DateTime' 그 결과는 Get-Date 전화입니다. 또는 사용하는 것이 가능하다.NET DateTime 객체를 직접 변환하여 특정 문화입니다. 예를 들어를 호출하여 $dateTime.ToString((New-Object System.Globalization.CultureInfo("en-ES"))). 하지 않지만 모든 유용할 수 있도 통과하는 형식으로 식별자를 이 방법입니다. 이와 관련이 있는 경우에 당신이 피하고 싶은 추가로 만드는 개체입니다. 약간 불필요한 전화될 것입 $dateTime.ToString("o", (New-Object System.Globalization.CultureInfo("en-ES"))) (형식으로 오는 같은 모든 문화에서).

2021-12-01 06:41:00

감사에 대한 응답@세지만 아직 솔루션. 려고 했을 수정하는 코드로 라인,하지만 나는 아직도 얻을 수 없는 날짜와 시간에 지정된 형식으로 직접 코드에서 말하는"모든 DateTime 값 CSV 입력 파일을 변환하는 형식 dd-MMM-yyyy hh:mm거나,예를 들어 문화는 이름 es-ES또는 이와 유사한",즉,직접 지정 코드로 범용/일반 방식으로 이에 관계없이 작동하는 경우 PC 에서 영어 날짜 및 시간 형식,또는 컴퓨터에서 스페인 날짜 및 시간 형식,또는 컴퓨터에 프랑스의 날짜 및 시간 형식
adiario

라인으로가는 다음 코드의 시스템에서 날짜 우리 형식은: $resultvalue = $v[0] | Convert-CurrencyStringToDecimal $expectedvalue = $v[1] | Convert-CurrencyStringToDecimal $cultureInfo= New-Object System.Globalization.CultureInfo("en-US") $dtreData = [PSCustomObject]@{ 'DateTime' = ([System.DateTime]::Parse($item.'Date/Time', $cultureInfo)) 'ResultValue' = [decimal]$resultvalue 'ExpectedValue' = [decimal]$expectedvalue } 변환 작동 오류 없이,하지만 주는 결과에서 우리 형식&에 의존 OS 일 형식입니다.
adiario

저도 다음의 수정 코드와 PC 시스템 날짜 형식에서"24-Nov-21": …$resultvalue = $v[0] | Convert-CurrencyStringToDecimal $expectedvalue = $v[1] | Convert-CurrencyStringToDecimal $cultureInfo= New-Object System.Globalization.CultureInfo("es-ES") $dtreData = [PSCustomObject]@{ 'DateTime' = ([System.DateTime]::Parse($item.'Date/Time', $cultureInfo)) 'ResultValue' = [decimal]$resultvalue 'ExpectedValue' = [decimal]$expectedvalue 그리고 여기에 PowerShell 게 오류를 말하는:"내보내기-Csv:할 수 없는 바인딩을 인수를 매개 변수는'InputObject'기 때문에 null"
adiario

Get-Date -Format "o" $dateTime 나는 정말로 알지 못하는 것이 그 장소에 게시된 코드에서 질문입니다. 나는 그것을 넣어서 여러 같은 장소에서 마지막 라인,또는 후에 'DateTime' = ([System.DateTime]::Parse($item.'Date/Time', $cultureInfo))또는 그것으로만,PowerShell 게 오류가 있습니다. 대 $dateString = "11/23/21, 12:58 PM"; 나는 사용하지 않은 이 부분이기 때문에 나는 그것을 볼 것 입력 예고 이 경우에는 입력 DateTime 값은 이미로 CSV 파일에 있는 값을 해야 하는 일했다.
adiario

는 경우에 당신이 알고있는 방법@Seth 시 코드를 수정에 게시된 질문은 위의 추가 필요한 수정 사항이 있는 결과가 필요한 날짜와 시간이다. 매우 감사드립니다 당신의 시간!
adiario

당신을 만드는 날짜 객체를 특정한 문화입니다. 당신이 원하는 $dtreDataGet-Date -Format "o" $dateTime. A Get-Date$dateTime 으로 입력해야기입니다. 수 또는 명시적으로 정의 로케일 출력 예:사용 $localDT.ToString((New-Object System.Globalization.CultureInfo("en-ES"))).
Seth

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................