我需要使用Powershell将UTC时间/日期输出转换为ISO 8601(或类似格式)的东部标准时间,以便在DOS Batch文件中使用。
我对Powershell的经验很少,但是以前已经为各种DOS批处理文件修改了现有的Powershell命令。 Powershell可以轻松地从多个时区输出时间/日期,但是尚不清楚它是否可以随时以数字格式显示该输出。
在DOS批处理文件中,可以调用Powershell以这种格式显示UTC时间-
echo | powershell (get-date).ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss')
我需要调用其他时区,但输出为'FullDateTimePattern',其拼写为-
echo | Powershell [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time')
我希望以前的命令可以(以某种方式)合并在一起,或者希望将“ Get-Date -format”说明符之一应用于第二个代码示例,或者希望将偏移值应用于UTC时间/日期输出,或者是否可以将其他一些简单的代码解决方案(或实用程序)整合到DOS批处理文件中。
答案 0 :(得分:1)
To convert the current UTC [datetime]
instant to Eastern Standard Time with the specified format:
powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId([datetime]::UtcNow, 'Eastern Standard Time').ToString('yyyy-MM-ddTHH:mm:ss')"
Note the following additional improvements:
No need for echo |
: When PowerShell is invoked with a command with (possibly implied) -Command
/ -c
, it automatically exits after completing that command. (As an aside, echo |
doesn't send just a newline, it sends the string ECHO is on.
, followed by a newline; to send just a newline, you'd have to use echo. |
Option -c
(-Command
) is used explicitly, not just to make the intent clearer, but also to ease potential later transition to PowerShell Core, where -Command
is no longer the default (-File
is).
While your specific command would work without the enclosing double quotes ("..."
), it's generally better to use them, so that commands that include cmd.exe
metacharacter - e.g., &
- don't break.
答案 1 :(得分:0)
非常感谢您的答复。我注意到有人可以通过这种方式将记录在案的Microsoft Get-Date格式说明符应用于时区(鉴于我缺乏Powershell经验,这并不明显)。
在最宽的传播时区中测试大多数这些选项可能会有所帮助。
日期标准时间[(UTC-12:00)国际日期变更线西]
莱恩群岛标准时间[(UTC + 14:00)基里蒂马蒂岛]
以下代码于2019年6月1日(星期六)东部标准时间下午1点运行,以转换为Line Islands标准时间(UTC + 14:00)
ShortDatePattern:相当于Get-Date -format d
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('d')"
LongDatePattern:相当于Get-Date -format D
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('D')"
完整日期和时间(长日期和短时间):等效Get-Date -format f
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('f')"
FullDateTimePattern(长日期和长时间):相当于Get-Date -format F
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('F')"
常规(短日期和短时间):等同于Get-Date -format g
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('g')"
常规(短日期和长时间):相当于Get-Date -format G
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('G')"
MonthDayPattern:相当于Get-Date -format m
或Get-Date -format M
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('m')"
往返日期/时间模式:相当于Get-Date -format o
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('o')"
RFC1123模式:等同于Get-Date -format r
或Get-Date -format R
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('r')"
使用本地时间的SortableDateTimePattern(基于ISO 8601):相当于Get-Date -format s
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('s')"
ShortTimePattern:相当于Get-Date -format t
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('t')"
LongTimePattern:相当于Get-Date -format T
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('T')"
UniversalSortableDateTimePattern使用通用时间显示格式:Get-Date -format u
等效
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('u')"
使用通用时间的完整日期和时间(长日期和长时间):相当于Get-Date -format U
将此选项应用于任何时区(UTC除外)似乎都会产生+4:00的偏移量,这可能是有问题的。
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('U')"
YearMonthPattern:相当于Get-Date -format y
或Get-Date -format Y
Powershell.exe -c "[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date), 'Line Islands Standard Time').ToString('y')"