下一个生日的天数

时间:2018-03-21 08:40:54

标签: powershell date object calculation

我的问题是计算你的下一个生日是几天 我已经做了输入和计算,但日期的格式是错误的。

我希望我的程序使用以下格式计算您的下一个生日:DD.MM.YYYY并且没有小数。此外,当我输入类似“你好”的东西时,它不应该崩溃但是给我一个错误,它不是一个有效的日期。

#Clearing
Clear-Host

#Liste von Variabeln
$geburtstag
$datumvonheute
$zeitbisgeburtstag

#initialisieren von Variabeln
$geburtstag = Get-Date 
$datumvonheute = Get-Date
$zeitbisgeburtstag = ""

function ParseDate([string]$datumvonheute)
{
    try{
        $result = 0
        if (!([DateTime]::TryParse($datumvonheute, [ref]$result)))
        {
            throw "Es wurde ein falsches Datum eingegeben! $geburtstag"
        }
        $isok = $true
        $geburtstag.ToDateTime($geburtstag)

    } catch {
        $result
        Write-Host "Falsche Eingabe!"
        $isok = $false
    }
}
do{
    $geburtstag = Read-Host "Bitte geben Sie ihren nächsten Geburtsdatum ein [dd.mm.yyyy]"
    ParseDate($geburtstag)
} until($isok = $true)

$FromDate  =[DateTime] $datumvonheute
$ToDate    =[DateTime] $geburtstag

($ToDate - $FromDate).TotalDays

1 个答案:

答案 0 :(得分:1)

由于种种原因,您的格式日期可能有误,但我认为这是因为文化不一样:在您的笔记本电脑上它可能是美国文化(MM / dd / yyyy),而日期你要进入的格式是de-de culture(dd / MM / yyyy)。

您可以在开始时定义文化,然后根据您的需要使用它来正确设置。

$geburtstag.ToDateTime($geburtstag)

你的问题在这里:

$geburtstag = [datetime]::Parse($datumvonheute,$cultureInfo)

您需要解析它才能获得正确的日期:

$fromDate - $toDate

我会计算#Clearing Clear-Host $cultureInfo = New-Object System.Globalization.CultureInfo('de-de') #Liste von Variabeln $geburtstag $datumvonheute $zeitbisgeburtstag #initialisieren von Variabeln $geburtstag = Get-Date $datumvonheute = Get-Date $zeitbisgeburtstag = "" function ParseDate([string]$datumvonheute) { try{ $result = 0 if (!([DateTime]::TryParse($datumvonheute, [ref]$result))) { throw "Es wurde ein falsches Datum eingegeben! $geburtstag" } $isok = $true #$geburtstag.ToDateTime($geburtstag) $geburtstag = [datetime]::Parse($datumvonheute,$cultureInfo) } catch { $result Write-Host "Falsche Eingabe!" $isok = $false } } do{ $geburtstag = Read-Host "Bitte geben Sie ihren nächsten Geburtsdatum ein [dd.mm.yyyy]" ParseDate($geburtstag) } until($isok = $true) $FromDate =[DateTime] $datumvonheute $ToDate =[DateTime] $geburtstag $totaldays = ($FromDate - $ToDate).Days Write-Output "Total Days: $totaldays" ,而不是反之亦然

{
  "SWITCHID": "Z4-W40-SS451A/5",
  "CREATE_DATE": ISODate("2018-02-24T19:00:14.808Z"),
  "RECEIVEDDATE": ISODate("2018-02-24T20:30:14.808Z"),
  "STATUS": "LIGHTS ON",
  "avgduration": 202.50562416666668,
  "offduration": 1.5
} {
  "SWITCHID": "Z4-W40-SS451A/5",
  "CREATE_DATE": ISODate("2018-02-24T19:00:14.808Z"),
  "RECEIVEDDATE": ISODate("2018-02-24T20:30:14.808Z"),
  "STATUS": "LIGHTS OFF",
  "avgduration": 269.5074988888889,
  "offduration": 1.5
}
db.k.aggregate({
  "$group": {
    _id: {
      SWITCHID: "$SWITCHID"
    },
    on_minus_off: {
      $sum: {
        "$cond": [{
          "$eq": ["$STATUS", "ON"]
        }, "$avgduration", {
          $subtract: [0, "$avgduration"]
        }]
      }
    }
  }
})