2009-11-17 9 views
8

У меня возникли проблемы с созданием метки времени в пакетном файле Windows, потому что я получаю разные форматы дат в разных версиях Windows.Как получить временную отметку времени UNIVERSAL Windows

Моя машина:

>echo %date% 
>Tue 11/17/2009 

Друзья Машина:

>echo %date% 
>11/17/2009 

Я предполагаю, что должен быть какой-то способ получить дату (11/17/2009) с обеих строк, используя для/ф , Я пытался и искал поисковую систему и не мог найти ответ.

Есть ли другой способ получить временную метку без использования% date%?

ответ

2

Используйте VBScript, если вы хотите, чтобы получить независимые настройки времени даты:

thedate = Now 
yr = Year(thedate) 
mth = Month(thedate) 
dy = Day(thedate) 
hr = Hour(thedate) 
min = Minute(thedate) 
sec = Second(thedate) 
WScript.Echo yr&mth&dy&hr&min&sec 
+0

Это действительно полезно, используемые внутри скрипта: > CSCRIPT date.vbs // Nologo (где date.vbs содержит код, который вы включены) – eliocs

+0

не это просто возвращает локальный DateTime? Вопрос состоял в том, чтобы генерировать UTC datetime - и это то, что я ищу. – Jim2B

1

К сожалению, это не может быть сделано напрямую, поэтому вам необходимо прибегнуть к хакам, например GetDate.cmd.

Существует множество инструментов VBScript и небольших внешних инструментов командной строки, которые не являются чем-то, на что я могу повлиять, если вы уже не используете что-то подобное в своей общей системе.

Лично я бы попытался маршрутизировать его, используя PowerShell, который аккуратно обошел эту проблему полностью.

+0

Это отличная мысль, но какой код PowerShell будет делать это? – Jim2B

+0

@ Jim2B В PS вы можете получить объект через [DateTime] :: UtcNow, а затем участник на этом (например, он имеет свойство Month и т. Д.). Это ты имел в виду? –

0

Вам не нужно VBScript. Вы можете сделать это с чем-то вроде этого:

echo %date:~-10,2%/%date:~-7,2%/%date:~-4,4% 

Source

+2

не принимает этот формат формата даты? –

+0

Yup, это предполагает, что локальное форматирование даты имеет определенный формат. – jamiebarrow

4

Отъезд doff.exe. Я использую это для получения временных меток для именования файлов журналов. На своем веб-сайте:

DOFF печатает отформатированную дату и время с дополнительным смещением даты (например, -1 печатает вчерашнюю дату, +1 печать завтрашней даты). Чтобы просмотреть все доступные опции, выполните «doff -h». Обычно я использую эту утилиту для переименования файлов журналов, чтобы они включали метку времени (см. Третий пример ниже). Этот код должен компилироваться под Unix/Linux, а также DOS.

Примеры команд:

C:\>doff 
19991108131135 

Без параметров выход текущая дата/время в следующем формате: yyyymmddhhmiss

C:\>doff mm/dd/yyyy 
11/08/1999 

В приведенном выше примере дается спецификация формата даты.

@echo off 
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a 
set dd=%%b 
set yyyy=%%c) 
rename httpd-access.log httpd-access-%yyyy%%mm%%dd%.log 

Пакетный файл образца выше показывает аккуратный способ переименовать файл журнала, основанный на вчерашней даты.Команда «for» выполняет doff для печати вчерашней даты (параметр «-1» указывает вчера), а затем извлекает каждый компонент даты в переменные пакетного файла DOS. Команда "переименовать" переименовывает "HTTPd-access.log" в "HTTPD-Access-[вчерашняя дата] .log"


Также проверьте now.exe Microsoft, доступный в Windows Server 2003 Resource Kit Tools. Одна плохая вещь, о которой я узнал (трудный путь), заключается в том, что она устанавливает ERRORLEVEL в число напечатанных символов.

выглядит так:

c:\>now 

Thu May 19 14:26:45 2011 

Помощь:

NOW : Display Message with Current Date and Time 

Usage : NOW [message to be printed with time-stamp] 

    NOW displays the current time, followed by its command-line arguments. 
    NOW is similar to the standard ECHO command, but with a time-stamp. 
0

Как я уже писал здесь: Batch: Timestamp to UNIX Time

насчет простой 1-линия длинной программы C возвращающегося UNIX метку времени? Вы можете получить значение из% errorlevel% в пакетном скрипте.

#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
    return (int) time(NULL); 
} 

В моей тестовой в командной строке он работал:

C:\Users\dabaran\Desktop\cs50\src\C>.\time || echo %errorlevel% && set mytstamp=%errorlevel% 
1419609373 

C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp% 
1419609373 
Смежные вопросы