【问题标题】:Today and Yesterday's date at midnight in specific format特定格式的今天和昨天午夜的日期
【发布时间】:2019-09-20 01:13:23
【问题描述】:

我需要按以下格式在午夜获取今天和昨天的日期:

08/05/2018 00:00

我似乎能得到的最好的结果是:

get-date -Uformat "%D %R" -Hour 0 -Minute 00

08/05/18 00:00

当我试图在午夜获得昨天时,我惨遭失败。

(Get-Date -UFormat "%s" -Hour 0 -Minute 00 -Second 00).AddDays(-1)

方法调用失败,因为 [System.String] 不包含名为 AddDays 的方法。 在行:1 字符:1 + (Get-Date -UFormat "%s" -Hour 0 -Minute 00 -Second 00).AddDays(-1) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound

【问题讨论】:

    标签: powershell date


    【解决方案1】:

    要在午夜获取日期(时间),您可以使用:

    (Get-Date).Date
    

    或者

    [datetime]::Today
    

    如果您当前的日期格式具有不同的分隔符(如此处所示),则根据您的要求对其进行格式化可能会很棘手。

    > (get-date).Date.ToString('MM/dd/yyyy HH:mm')
    08-05-2018 00:00
    

    .ToString() 方法覆盖了分隔符;要使用斜杠文字,您必须使用反斜杠对其进行转义:

    > (get-date).Date.ToString('MM\/dd\/yyyy HH:mm')
    08/05/2018 00:00
    

    或使用:

    > (get-date).Date.ToString('MM/dd/yyyy HH:mm', [cultureinfo]::InvariantCulture)
    08/05/2018 00:00
    

    【讨论】:

      【解决方案2】:

      代码

      (Get-Date).ToString("dd/MM/yyyy 00:00")
      (Get-Date).AddDays(-1).ToString("dd/MM/yyyy 00:00")
      

      您必须在 date 仍然是日期(而不是看起来像日期的字符串)时对它执行 AddDays。

      结果

      05/08/2018 00:00
      04/08/2018 00:00
      

      对于美式格式

      dd/MM/yyyy 简单地变成MM/dd/yyyy

      【讨论】:

        【解决方案3】:

        今天使用[DateTime]::Today 并将其格式化为ToString()

        [Datetime]::Today.ToString("dd/MM/yyyy HH:mm")
        

        对于昨天,只需添加AddDays(-1)

        [Datetime]::Today.AddDays(-1).ToString("dd/MM/yyyy HH:mm")
        

        【讨论】:

          【解决方案4】:

          -UFormat 选项让您走在正确的轨道上:

          Get-Date -Hour 0 -Minute 00 -UFormat "%m/%d/%Y %H:%M"
          

          这会产生以下输出:

          08/05/2018 00:00
          

          您看到的错误是由于您在字符串上调用AddDays 方法。要操纵日期,您可以执行以下操作:

          (Get-Date -Hour 0 -Minute 00).AddDays(-1) | Get-Date -UFormat "%m/%d/%Y %H:%M"
          

          这将产生所需的输出。

          【讨论】:

            【解决方案5】:
            (Get-Date).AddDays(-1)|Get-Date -format "yyyyMMdd"
            

            【讨论】:

              猜你喜欢
              • 2020-09-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多