Как получить дату и время в международном масштабе из командной строки Windows? - PullRequest
0 голосов
/ 01 апреля 2009

Из командной строки Windows мне нужно вывести либо локальную, либо utc дату и время системы, но с указанием частей даты и времени в нужном мне порядке, независимо от текущей настройки интернационализации компьютера.

Я видел этот связанный вопрос:
Как получить текущую дату и время в командной строке Windows, в подходящем формате для использования в имени файла?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 02 апреля 2009

Если вы не возражаете против использования небольшого VBScript, вы можете использовать что-то вроде этого:

' http://classicasp.aspfaq.com/date-time-routines-manipulation/can-i-make-vbscript-format-dates-for-me.html
' Use MSSTDFMT to mimic VB's Format() function. Provides more flexibility in
' formatting dates than the VBScript FormatDateTime() function.
On Error Resume Next
    dim fmt
    dim rs

    set fmt = WScript.CreateObject("MSSTDFMT.StdDataFormat") 
    set rs = WScript.CreateObject("ADODB.Recordset") 

    rs.Fields.Append "fldExpression", 12 ' adVariant 
    rs.Open 
    rs.AddNew 


    fmt.Format = WScript.Arguments(0)

    rs("fldExpression").DataFormat = fmt 
    rs("fldExpression").Value = Now() 

    WScript.Echo rs("fldExpression").Value 

    rs.close
    set fmt = nothing
    set rs = nothing

    WScript.Quit(0)

Я положил это в файл с именем formatDate.vbs. Затем вы можете позвонить из командной строки, передавая в нужном вам формате:

C:>cscript //nologo formatDate.vbs "mm-dd-yyyy" 
04-02-2009 
C:>cscript //nologo formatDate.vbs "dd-mm-yyyy"
02-04-2009 
C:>cscript //nologo formatDate.vbs "dd-MMM-yy" 
02-Apr-09
C:>cscript //nologo formatDate.vbs "mm/dd/yyyy hh:mm"
04/02/2009 10:10
C:>cscript //nologo formatDate.vbs "dddddd ttttt"
Friday, April 03, 2009 6:48:57 AM
C:>cscript //nologo formatDate.vbs "General Date"
4/3/2009 6:49:53 AM

См. Предопределенные форматы даты / времени и Определяемые пользователем форматы даты / времени в MSDN для полного списка форматов, которые вы можете использовать.

Примечание: Объект MSSTDFMT зависит от доступности MSSTDFMT.dll, который устанавливается Visual Studio 6.0.

MSSTDFMT.dll, по-видимому, доступен на серверах Windows XP и Windows 2003; Я проверил несколько машин, на которых никогда не было установленной MS Visual Studio и присутствовала DLL.

1 голос
/ 12 апреля 2009

Я использую небольшой вариант сценария GetDate.cmd, чтобы получить только дату :

@SETLOCAL
@ECHO OFF
GOTO :begin
:fixdate
IF "%1:~0,1%" GTR "9" SHIFT
FOR /f "skip=1 tokens=2-4 delims=(-)" %%g IN ('echo.^|date') DO (SET %%g=%1& SET %%h=%2& SET %%i=%3)
GOTO :eof
:begin
FOR /f "tokens=1-4 delims=/-. " %%g IN ('date /t') DO (CALL :fixdate %%g %%h %%i %%j)
ECHO %aa%%yy%%mm%%dd%
ENDLOCAL

Используется преимущество формата вывода date и рассматривается случай, когда date /t печатает название дня недели перед информацией о году / месяце / дне. Однако оригинальный скрипт не работает правильно, если строки форматирования не гг , мм и дд . Я добавил обходной путь, который заставляет работать скрипт как для английской, так и для португальской систем: на португальском языке формат года - aa ; таким образом, оператор %aa%%yy% будет печатать год в %aa% и пустой в %yy%, но в английских системах происходит обратное.

Однако существуют более безопасные методы, которые включают синтаксический анализ формата даты из Реестра .

1 голос
/ 02 апреля 2009

Поместите следующее в файл с именем что-то вроде "GetLocalTime.vbs".

Function Pad( strText, intLen )
    Pad = Right( String( intLen, "0" ) & strText, intLen )
End Function

Dim d
d = Now
wscript.echo Pad(Year(d),4) & "-" & Pad(Month(d),2) & "-" & Pad(Day(d),2) & "T" & Pad(Hour(d),2) & ":" & Pad(Minute(d),2) & ":" & Pad(Second(d),2)

Запуск с:

cscript GetLocalTime.vbs //Nologo

Это выводит:

2009-04-02 14:22

И может быть адаптирован для записи даты и времени в любом порядке.

0 голосов
/ 01 апреля 2009

эхо выкл для / F "токены = 1,2 *" %% a in ('date / T') установить дату = %% a %% b эхо% дата% set strMonth =% date: ~ 0,2% set strDay =% date: ~ 3,2% set strYear =% date: ~ 6,4% установить strMonth установить strDay set strYear

Кстати: взял какой-то код отсюда ... http://www.computing.net/answers/dos/system-date-to-variable/3874.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...