Я пишу сценарий партии, и мне нужно время unix. Это легко под linux, но я не могу понять, как это сделать в Windows.Что такое эквивалент окна команды «date +% s»
ответ
Настоящий пакетный пакет, который должен работать в любом регионе. Он использует WMIC, чтобы получить текущее местное время независимо от локали. Все остальное является «простым» вопросом анализа строк и базовой математики.
:UnixTime [ReturnVar] [TimeStamp]
::
:: Computes the Unix time from the current local time as reported by the
:: operating system. The Unix time is the number of seconds that have elapsed
:: since midnight Coordinated Universal Time (UTC), January 1, 1970, not
:: counting leap seconds.
::
:: The result is returned in variable ReturnVar,
:: or the result is echoed if ReturnVar is not specified
::
:: If the TimeStamp is provided in the 2nd parameter, then the Unix time for
:: the TimeStamp is computed, rather then for the current time.
::
:: The TimeStamp must have the same format as used by WMIC:
::
:: YYYYMMDDhhmmss.ffffffSzzz
::
:: where:
::
:: YYYY = gregorian year
:: MM = month
:: DD = day
:: hh = hour in 24 hour format
:: mm = minute
:: ss = seconds
:: ffffff = fractional seconds (microseconds)
:: S = timezone sign: + or -
:: zzz = timezone: minutes difference from GMT
::
:: Each component must be zero prefixed as needed to maintain the proper width.
::
:: The ReturnVar parameter must be provided in order to use the TimeStamp.
:: A ReturnVar of "" will function the same as no ReturnVar. This enables the
:: specification of a TimeStamp without an actual ReturnVar.
::
@echo off
setlocal
set "ts=%~2"
if not defined ts for /f "skip=1 delims=" %%A in ('wmic os get localdatetime') do if not defined ts set "ts=%%A"
set /a "yy=10000%ts:~0,4% %% 10000, mm=100%ts:~4,2% %% 100, dd=100%ts:~6,2% %% 100"
set /a "dd=dd-2472663+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4"
set /a ss=(((1%ts:~8,2%*60)+1%ts:~10,2%)*60)+1%ts:~12,2%-366100-%ts:~21,1%((1%ts:~22,3%*60)-60000)
set /a ss+=dd*86400
endlocal & if "%~1" neq "" (set %~1=%ss%) else echo %ss%
exit /b
Обратите внимание, что это решение имеет ограниченный срок службы. Он перестанет работать в 2038-01-19, когда время Unix превышает максимальное значение подписанного 32-битного целого.
EDIT - Код был отредактирован для поддержки преобразования временной метки строки в командной строке вместо текущего местного времени. Точный диапазон поддерживаемых времен 1901-12-13 20: 45: 52.000000 - 2038-01-19 03: 14: 07.999999 GMT. Времена до 1970-01-01 00: 00: 00.000000 будут давать отрицательные значения.
он не работает, если вы не администратор (иначе root на окнах) – pizza
@pizza - Это новости для меня. Скрипт отлично работает для меня в Windows 7 без админа. Я уверен, что он работает и с другими версиями Windows. Вы действительно протестировали сценарий? И если да, то какая версия Windows? – dbenham
winxp: Не удалось зарегистрировать mof-файл (ы). Только члены группы администраторов могут использовать WMIC.EXE. Причина: Ошибка Win32: доступ запрещен. – pizza
Если вы используете «unix time», вы имеете в виду epoch second, тогда Windows не включает в себя инструменты для его создания. Вместо этого вы можете установить сторонние инструменты. Например:
- Установить Cygwin.
- Найти
date
двоичный код (подC:\Cygwin\
или где бы вы его не установили) - Используйте его, как в Linux.
С другой стороны, согласно удивительном комментарий на этот ответ, вы можете установить GNU Coreutils, которые также включают в себя команду date
. Он включает в себя ряд других инструментов, которые вам могут не понадобиться, но тогда и Cygwin.
Что? Даунвитировать без комментариев? – ghoti
Не нужно устанавливать Cygwin только для того, чтобы получить один инструмент. Большинство (все?) Инструменты GNU можно скачать и использовать без Cygwin –
да, это то, что я имею в виду под Unix-временем. – whoabackoff
Вы можете использовать vbscript в окнах, интерпретатор доступен в вашей системе.
'--------------------epoch.vbs-----------------------
option explicit
dim s,o,z
for each o in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
z=o.CurrentTimeZone
next
s=DateDiff("s", "01/01/1970 00:00:00", Now())-(60*z)
wscript.echo(s)
wscript.quit
- 1. Что такое инверсия «date +% s»?
- 2. Что такое java-эквивалент команды curl?
- 3. Что такое PHP-эквивалент команды Date.UTC Javascript?
- 4. Что такое эквивалент команды «Srand» в omnet ++?
- 5. эквивалент команды dumpstabs -s solaris в linux
- 6. Что такое эквивалент node.js окна ["myvar"] = значение?
- 7. Golang Что такое «%! S»
- 8. Что такое `cmd/s`?
- 9. Что такое «sed s _. */_»?
- 10. Что такое файлы .S?
- 11. Что такое эквивалент Postgresql для string.Format ("{0: s}", DateTime.Now)?
- 12. Что такое Python 3 эквивалент% s в строках?
- 13. Что такое эквивалент Python для ucfirst() или s /// e?
- 14. Что такое Ruby-эквивалент Python's `s =" hello,% s. Где% s? " % ("Джон", "Мария") `
- 15. Не устаревший точный эквивалент Date (String s) в Java?
- 16. Что такое эквивалент обновления MySql?
- 17. Что такое «S» в «NPM я -S»
- 18. Что такое эквивалент mysqli?
- 19. Что такое параметрический эквивалент?
- 20. Что такое эквивалент ereg()
- 21. Что такое угловой эквивалент JS этой команды Curl?
- 22. Что такое эквивалент метода StackExchange.Redis для команды Redis's BGSAVE
- 23. Что такое эквивалент webdriver для команды IDE селена 'assertTextNotPresent'?
- 24. Что такое эквивалент Powershell команды «find | grep» mystring »?
- 25. Что такое эквивалент команды «ant -f» в maven?
- 26. Что такое AWS SDK эквивалент команды запуска EC2
- 27. Что такое эквивалент команды unix -f в powershell?
- 28. Что такое запрос питона эквивалент следующей команды завитка
- 29. Что такое Угловой JS-эквивалент этой команды POST Curl?
- 30. Что такое SQL-эквивалент COUNTIF?
Возможно [это] (http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-us) помогу. – ArtemStorozhuk