【问题标题】:Get date and time on the same line在同一行获取日期和时间
【发布时间】:2013-12-13 08:32:22
【问题描述】:

我可以使用date /ttime /t 来获取日期和时间,但它不会并排显示。我想让它做到这一点并像这样显示:

Current Date & Time
-------------------

11/27/2013 10:43:05 AM

【问题讨论】:

    标签: powershell command-line


    【解决方案1】:

    尝试以下(PowerShell):

    Get-Date -Format G
    
    27.11.2013 17:10:23
    

    格式是用系统的区域设置定义的,所以对我来说这是我得到的,但如果你想要的区域日期/时间格式是你想要的,它应该像你想要的那样显示。

    (Get-Date).ToString()
    

    可能也可以。

    更新:

    "Date and time is: $((Get-Date).ToString())"
    

    【讨论】:

    • ToString() 是对象的通用函数,所以它是合乎逻辑的。我只需要看看它是否包含秒数。 -format 是一个用于字符串操作(以及某些对象,如日期时间)的 powershell“函数”。格式说明符可以在这里找到msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx
    • 那行得通。您怎么知道使用 -Format G 或 .ToString() ?以及如何使它看起来像“当前日期:27.11.2013 17:10:23”
    • 我不确定你的意思。试试"" | Select-Object @{n="Current Date";e={(Get-Date).ToString()}}"Current Date: $((Get-Date).ToString())",这取决于你想要一个对象(第一个)还是一个字符串(第二个)。
    • 我想在一行上输出日期和时间,旁边的标题是:“日期和时间是:___________”
    • ToString() 在将对象转换为字符串时不是必需的(如果将它嵌入到字符串中的子表达式中会发生这种情况)。
    【解决方案2】:

    在 PowerShell 中这很简单:

    (Get-Date).ToString('MM/dd/yyyy hh:mm:ss tt')
    

    cmd 有点复杂:

    rem Get the date and time in a locale-agnostic way
    for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x
    rem Leading zeroes for everything that could be only one digit
    set Month=0%Month%
    set Day=0%Day%
    rem Hours need special attention if one wants 12-hour time (who wants that?)
    if %Hour% GEQ 12 (set AMPM=PM) else (set AMPM=AM)
    set /a Hour=Hour %% 12
    if %Hour%==0 (set Hour=12)
    set Hour=0%Hour%
    set Minute=0%Minute%
    set Second=0%Second%
    set Month=%Month:~-2%
    set Day=%Day:~-2%
    set Hour=%Hour:~-2%
    set Minute=%Minute:~-2%
    set Second=%Second:~-2%
    rem Now you can just create your output string
    echo %Month%/%Day%/%Year% %Hour%:%Minute%:%Second% %AMPM%
    

    请注意,大量代码浪费在支持这种奇怪的日期和时间格式上。必要时前导零。另请注意,无论用户的区域和语言设置如何,此代码都有效。例如,它不依赖于用户的日期格式(对我来说无论如何都是 ISO 8601)。

    【讨论】:

    • 是的,这么简单的事情要复杂得多。
    • 好吧,如前所述,这是独立于语言环境的,因此您可以使用它创建任何您喜欢的日期格式。这就是复杂性的来源。
    【解决方案3】:

    我不是 cmd.exe 的向导,但它有效。可能有更简单的方法!

    @echo off
    setlocal enableextensions
    for /f "tokens=*" %%a in ('date /t') do (
       set d=%%a
    )
    for /f "tokens=*" %%a in ('time /t') do (
       set t=%%a
    )
    REM Add those puppies together
    set "dt=%d% %t%"
    echo %dt%
    27/11/2013  16:04
    

    【讨论】:

    • 比我想象的要复杂得多。你知道如何在 powershell 中做到这一点吗?
    • 不抱歉,大约 7 年前,我对使用 XP3 的 Windows 失去了兴趣!也许知道 powershell 的人会看到我所做的并能够弄清楚如何在 powershell 中做到这一点。
    • 你可以在 PowerShell 中使用 "$(cmd /c date /t) $(cmd /c time /t)" 得到完全相同的东西,但我求你不要这样做。
    • 不错的答案,乔伊 - 并标记为这样。如果 MS 不断改进,它们很快就会变得几乎和 Unix/Linux 一样好;-)
    • 好吧,规范的 PowerShell 变体将只是 Get-Date[DateTime]::Now - 并在输出时格式化为所需的格式。在我看来,PowerShell 远远优于 bash 及其同类产品,唯一的原因是它在管道上传递对象。
    【解决方案4】:

    对于 CMD,为什么不简单:

    C:\temp\test>ECHO %DATE% %TIME%
    Mon 06/24/2019 18:00:17.63
    

    如果你想在开头去掉 Day,这里是 Joey 所做的压缩版本,使用子字符串。

    for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
    set timestamp=%dt:~0,4%/%dt:~4,2%/%dt:~6,2% %dt:~8,2%:%dt:~10,2%:%dt:~12,2%
    ECHO %timestamp%
    
    2019/06/24 17:56:43
    

    2019/06/24 17:56:43

    【讨论】:

      【解决方案5】:

      您也可以在 powershell 中使用 .NET DateTime:

      Write-Host "Current datetime is $([System.Datetime]::Now.ToString("dd/MM/yy HH:mm:ss"))"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        相关资源
        最近更新 更多