sourcecode

PowerShell에서 문자열을 datetime으로 변환

copyscript 2023. 7. 28. 22:31
반응형

PowerShell에서 문자열을 datetime으로 변환

PowerShell을 사용하여 문자열을 날짜/시간으로 변환하려고 합니다.쉬울 거예요, 그렇죠?

CSV 가져오기에서 문자열을 가져오는 중이며 다음 형식으로 제공됩니다.Jul-16나는 그것을 내가 원하는 형식으로 만드는 여러 가지 방법을 시도했습니다.yyyy-MM-dd그리고 저는 현재 다음과 같은 곳에 있습니다.

$invoice = $object.'Invoice Month'
$invoice = "01-" + $invoice
$invoice = [datetime]::parseexact($invoice, 'yyyy-MM-dd', $null)

하지만 오류가 발생했습니다.

문자열이 올바른 날짜 시간으로 인식되지 않았습니다.

내가 뭘 빼놓았나요?

ParseExact는 당신이 나가고자 하는 형식이 아니라, 그것이 구문 분석할 것으로 예상되는 날짜의 형식을 알려줍니다.

$invoice = '01-Jul-16'
[datetime]::parseexact($invoice, 'dd-MMM-yy', $null)

날짜 문자열을 출력하려는 경우:

[datetime]::parseexact($invoice, 'dd-MMM-yy', $null).ToString('yyyy-MM-dd')

단순히 DateTime에 문자열을 캐스팅할 수 있습니다.

[DateTime]"2020-7-16"

또는

[DateTime]"Jul-16"

또는

$myDate = [DateTime]"Jul-16";

다음과 같은 작업을 수행하여 결과 DateTime 변수의 형식을 지정할 수 있습니다.

'{0:yyyy-MM-dd}' -f [DateTime]'Jul-16'

또는

([DateTime]"Jul-16").ToString('yyyy-MM-dd')

또는

$myDate = [DateTime]"Jul-16";
'{0:yyyy-MM-dd}' -f $myDate

구문 분석하려면 이미 있는 형식을 지정해야 합니다.

$InvoiceDate = [datetime]::ParseExact($invoice, "dd-MMM-yy", $null)

이제 필요한 형식으로 출력할 수 있습니다.

$InvoiceDate.ToString('yyyy-MM-dd')

또는

'{0:yyyy-MM-dd}' -f $InvoiceDate

크리스 덴츠의 대답은 이미 OP들의 질문을 다뤘지만, 이것이 구글에서 가장 많이 검색된 것이었습니다.PowerShell format string as date저는 다른 현악기의 예를 들어볼까 생각했습니다.


만약 나처럼, 당신은 이렇게 타임 스트링을 얻습니다.20190720170000.000000+000

주의해야 할 중요한 점은 사용해야 한다는 것입니다.ToUniversalTime()사용 시[System.Management.ManagementDateTimeConverter]그렇지 않으면 입력에 대한 오프셋 시간을 얻을 수 있습니다.

PS 코드

cls
Write-Host "This example is for the 24hr clock with HH"
Write-Host "ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter]"
$my_date_24hr_time   = "20190720170000.000000+000"
$date_format         = "yyyy-MM-dd HH:mm"
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_24hr_time).ToUniversalTime();
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_24hr_time).ToUniversalTime().ToSTring($date_format)
[datetime]::ParseExact($my_date_24hr_time,"yyyyMMddHHmmss.000000+000",$null).ToSTring($date_format)
Write-Host
Write-Host "-----------------------------"
Write-Host
Write-Host "This example is for the am pm clock with hh"
Write-Host "Again, ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter]"
Write-Host
$my_date_ampm_time   = "20190720110000.000000+000"
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_ampm_time).ToUniversalTime();
[System.Management.ManagementDateTimeConverter]::ToDateTime($my_date_ampm_time).ToUniversalTime().ToSTring($date_format)
[datetime]::ParseExact($my_date_ampm_time,"yyyyMMddhhmmss.000000+000",$null).ToSTring($date_format)

산출량

This example is for the 24hr clock with HH
ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter]

20 July 2019 17:00:00
2019-07-20 17:00
2019-07-20 17:00

-----------------------------

This example is for the am pm clock with hh
Again, ToUniversalTime() must be used when using [System.Management.ManagementDateTimeConverter]

20 July 2019 11:00:00
2019-07-20 11:00
2019-07-20 11:00

MS 문서[Management.ManagementDateTimeConverter]:

https://learn.microsoft.com/en-us/dotnet/api/system.management.managementdatetimeconverter?view=dotnet-plat-ext-3.1

$invoice = "Jul-16"
[datetime]$newInvoice = "01-" + $invoice

$newInvoice.ToString("yyyy-MM-dd")

여기 있습니다. 유형 가속기를 사용하는 동시에 새로운 변수에도 사용할 수 있습니다. 다른 곳에서 사용하려면 다음과 같이 사용하십시오.$newInvoice.ToString("yyyy-MM-dd")~하듯이$newInvoice나중에 문자열로 캐스팅하지 않는 한 항상 datetime 형식이지만 datetime 함수를 수행할 수 있는 기능이 손실됩니다(일 추가 등).

아래에 도움이 되길 바랍니다!

PS C:\Users\aameer>$invoice = $object.'Invoice Month'
$invoice = "01-" + $invoice
[datetime]$Format_date =$invoice

이제 유형이 변환되었습니다.메소드를 사용하거나 모든 속성에 액세스할 수 있습니다.

Example :$Format_date.AddDays(5)

매우 쉽습니다. 저의 경우에는 작동합니다.

입력:

$Date = '29-07-2022'

날짜 형식 변환:

[datetime]::parseexact($date, 'dd-MM-yyyy', $null).ToString('dd-MMMM-yyyy')

출력:

enter image description here

숫자(초)를 일/시간/초 등으로 변환해야 했지만 관련 요구 사항이 있었습니다.

$seconds = 41414141
New-Timespan -seconds $seconds

enter image description here

언급URL : https://stackoverflow.com/questions/38717490/convert-a-string-to-datetime-in-powershell

반응형