Урок 11 по VBScript: Функции vbs для работы с датой и временем
В этой статье мы рассмотрим функции vbs для работы с датой и временем. Они позволяют получать значение текущей даты и времени, включать таймер для вычисления времени, затраченного на выполнение заданного блока кода. Извлекать по отдельности значения часов, минут и секунд из времени, или значения год, месяц и день из даты.
Хорошо, давайте приступим.
Функции vbs для работы с датой и временем
Date – позволяет получить текущую дату (число, месяц и год).
DateAdd(iterval, number, date) – добавляет к заданной дате date заданный промежуток iterval:
interval — параметр определяет тип интервала, является строковой константой и может принимать следующие значения:
- yyyy — год;
- q — квартал;
- m — месяц;
- y — номер дня в году;
- d — день;
- w — номер дня в неделе;
- ww — номер недели в году;
- h — час;
- n — минута;
number – определяет число интервалов, параметр принимает как положительные, так и отрицательные значения. Если передано дробное число, то оно округлится.
DateDiff(interval, date1, date2[, firstdayofweek [, firstweekofyear]]) – позволяет получить значение временных интервалов (interval — параметр описан в функции vbs AddDate ). Аргументы date1, date2 – те даты, между которыми вычисляется разница. firstdayofweek – позволяет указать, с какого дня нужно считать начало недели, firstweekofyear — это константа, показывающая, какую неделю следует считать первой в году.
DatePart(interval, date [, firstdayofweek [, firstweekofyear]]) – возвращает указанную часть даты, например день, месяц и так далее.
DateValue(date) – в этой функции vbs происходит проверка на корректную дату.
Hour(time) – данная vbs функция позволяет извлечь значение часа из передаваемого параметра time. Возвращается целое число в диапазоне от 0 до 23.
Minute(time) – аналог Hour(), только вернёт число минут в диапазоне от 0 до 59.
Month(date) — выделяет номер месяца из даты, заданной параметром date. Возвращает целое число от 1 до 12.
MonthName(month [, abbr]) – позволяет получить наименование месяца. Параметр month – целое значение в диапазоне от 1 до 12 (номер месяца), параметр abbr – булево значение, если установлено true – краткий формат, если false – полный формат, по умолчанию — false.
Now – аналогично функции vbs Date, но помимо текущей даты возвращает и время.
Time – собственно, вернёт текущее системное время.
Timer – вернёт количество прошедших с полуночи секунд (точность до 1 миллисекунды, три знака после комы). Удобно использовать для вычисления времени, затраченного на выполнение блока кода.
TimeSerial(hour, minute, second) – вернёт тип Вариант подтипа Date с указанным временем, тут параметр hour – часы, диапазон от 0 до 23, minute – минуты, диапазон от 0 до 59, second – секунды, от 0 до 59. Если значение параметра превышает заданный предел, то это повлияет на следующий параметр.
TimeValue(time) — вернёт переменную подтипа Date, которая соответствует времени, заданному параметром time. Параметр time может содержать строку, литерал времени или тип Дата.
Weekday(date[, firstdayofweek]) — возвращает номер дня недели для даты, заданной параметром date. Параметр firstdayofweek — это константа, показывающая, какой из дней недели следует считать первым.
WeekdayName(weekday [, abbr[, firstdayofweek]]) — возвращает наименование для дня недели с порядковым номером weekday. Если логический параметр abbr равен true, то наименование дня недели представляется в виде аббревиатуры, в противном случае — в полном виде. Значение параметра firstdayofweek здесь то же, что и в функции Weekday.
Year(date) — выделяет год из даты, заданной параметром date, и возвращает это целое число.
Спасибо за внимание. Автор блога Владимир Баталий
How to Create Filename with Date Time in Windows Batch Script
This tutorial will help you to create files and directories with the name of current date time on Windows system. For example, you are writing a script which creates backup regularly, Now you want to organize daily backups with the current date and time name, so it will be easier to identify, which folder containers backups of which date. Go through the tutorial and understand how you can accomplish this.
Get Date & Time in Batch Script
Windows takes the date in the format like Thu 11/02/2017. Now below 3 set of commands extract the date in YYYY format, month in MM format and date in DD format and stored in CUR_YYYY, CUR_MM, and CUR_DD variables correspondingly.
Next is to parse the time which is available in 11:20:56.39 (Hours, Minutes, Seconds, and Micro Seconds) format. Now extract the hours, minutes, seconds, and microseconds and store them in variables.
Now, you have variables having current date and time in variables. You can use and create any file name as per your requirements like:
If your current date time is Nov 02, 2017 15:41:36, then the above example will create a file in the current directory with name “access_20170306-143822.log”.
A Sample Batch Script with Date & Time
The complete windows batch script will look like below. To test this create a file test.bat with the following content. Save the file and execute the script.
You will see a directory is created with name 20171102-154136 and a file create in current directory with name access_20171102-154136.log (Filename will be according to current date and time and will change during your testing)
Формат даты и времени в пакете Windows script
В пакете Windows (Windows XP) script Мне нужно отформатировать текущую дату и время для последующего использования в именах файлов и т.д.
Он похож на вопрос Как добавить дату в пакетных файлах, но со временем также.
У меня это до сих пор:
Есть ли способ, которым я могу разрешить одну цифру часа в% TIME%, поэтому я могу получить следующее?
Я закончил с этим script:
:: На WIN2008R2, например. Мне нужно было сделать ваш “установленный месяц =% даты:
3,2%”, как показано ниже: иначе появляется 00 для MONTH
Вот как я создаю имя файла журнала (на основе http://ss64.com/nt/syntax-getdate.html):
Если PowerShell установлен, вы можете легко и надежно получить дату/время в любом формате, который вам нужен, например:
Конечно, в настоящее время PowerShell всегда установлен, но в Windows XP вы, вероятно, захотите использовать этот метод, если ваша партия script используется в известной среде, где вы знаете, что PS доступен (или проверьте свою партию файл, если доступна PowerShell…)
Вы можете разумно спросить: зачем вообще использовать пакетный файл, если вы можете использовать PowerShell для получения даты/времени, но я думаю, что некоторые очевидные причины: (а) вы не все знакомы с PowerShell и по-прежнему предпочитаете делать большинство вещей старомодным способом с пакетными файлами или (б) вы обновляете старый script и не хотите переносить все на PS.
Я обычно делаю это так, когда мне нужна строка даты/времени:
Это для немецкого формата даты/времени (dd.mm.yyyy hh: mm: ss). В основном я конкатенирую подстроки и, наконец, заменяю все пространства нулями.
Краткое объяснение того, как работают подстроки:
Таким образом, чтобы получить только год с даты, например “29.03.2018”, используйте:
Сегодня я столкнулся с этой проблемой и решил ее:
Он заменяет пробелы 0s и в основном нулевые прокладки в час.
После некоторого быстрого поиска я не выяснил, нужны ли ему расширения команд (все еще работало с SETLOCAL DISABLEEXTENSIONS).
Как уже отмечалось, анализ даты и времени полезен только в том случае, если вы знаете формат, используемый текущим пользователем (например, MM/dd/yy или dd-MM-yyyy, чтобы назвать два). Это можно определить, но к тому моменту, когда вы сделаете все, что нужно, и проанализируйте, вы все равно столкнетесь с ситуацией, когда используется неожиданный формат, и вам потребуются дополнительные настройки.
Вы также можете использовать некоторую внешнюю программу, которая вернет пул дат в предпочтительном формате, но у этого есть недостатки, связанные с необходимостью распространять служебную программу с помощью script/batch.
Есть также пакетные трюки, использующие часы CMOS в довольно грубом виде, но это tooo близко к оголенным проводам для большинства людей, а также не всегда предпочтительное место для получения даты/времени.
Ниже приведено решение, позволяющее избежать вышеуказанных проблем. Да, это вводит некоторые другие проблемы, но для моих целей я нашел это самым простым и ясным, самым портативным решением для создания datestamp в .bat файлах для современных систем Windows. Это всего лишь пример, но я думаю, вы увидите, как изменить для других форматов даты и/или времени и т.д.
Следующий может быть не прямым ответом, а близким?
По крайней мере, это может вдохновить.
Если вам не нужен именно этот формат:
Затем вы можете использовать следующие 3 строки кода, в которых используются% date% и% time%:
Примечание. Символы / и : удаляются, а символ . и пробел заменяются символом подчеркивания.
Пример вывода (принято в среду 8/5/15 в 12:49 PM с 50 секундами и 93 миллисекундами):
Форматирование offset:length поддерживаемое командой SET в Windows, не позволит вам вставлять 0 как вам кажется, вас интересует.
Однако вы можете закодировать сценарий BATCH для проверки того, что час меньше 10 и
соответственно, с другой echo строкой.
Вы также можете перейти на другие методы программирования, чтобы попасть сюда.
Это довольно просто в unix bash (доступно с Cygwin на Windows), чтобы просто сказать:
И он всегда правильно накладывается.
Я сделал это следующим образом:
Вы можете сделать это намного проще:
echo% datetimef% return “
Первая строка преобразует дату/время в желаемый формат
а второй заменяет все пробелы на 0 (ноль).
Я действительно новичок в пакетных файлах, и это мой код! (Я не уверен, почему, но я не мог комбинировать дату/t и время/т вместе, и я не мог использовать % date% и % time% напрямую без переменной…)
Это отчасти повторное использование от других (вопрос состоял в том, чтобы получить отформатированное время для использования в качестве имени файла).
Первая строка всегда выводит в этом формате аспекты часового пояса:
20150515150941.077000 + 120
Это оставляет вам только форматирование вывода в соответствии с вашими пожеланиями.
Чтобы создать временную метку YYYY-MM-DD hh:mm:ss (24 часа), я использую:
Есть еще один простой способ сделать это:
Эта партия script сделает именно то, что хочет O.P. (протестировано в Windows XP SP3).
Я также использовал этот умный трюк реестра, описанный ранее “jph”, IMHO – это самый простой способ получить 100% -ное согласованное форматирование даты до «yyyy_MM_dd» в любой новой или старой системе Windows. Изменение одного значения реестра для этого является мгновенным временным и тривиальным; он длится всего несколько миллисекунд, прежде чем он будет немедленно возвращен обратно.
Дважды щелкните этот командный файл для мгновенной демонстрации, появится окно командной строки и отобразится метка времени.
Создайте файл под названием “search_files.bat” и поместите содержимое в файл. Затем дважды щелкните по нему. Временная переменная% THH% была введена в действие для надлежащего управления AM. Если в первые 2 цифры времени есть 0, Windows игнорирует остальную часть имени файла LOG.
Этот файл bat (save as datetimestr.bat) создает строку datetime 3 раза: (1) длинную строку даты и времени с днем недели и секундами,
(2) короткая строка datetime без них и
(3) короткая версия кода.
Чтобы отдать должное, я объединил концепции Питера Мортенсена (18-18 июня в 21:02) и opello (25 августа 2011 года в 14:27).
Вы можете написать это намного короче, но эта длинная версия упрощает чтение и понимание кода.
Мне нравится короткая версия поверх @The lorax,
но для других языковых настроек это может быть немного иначе.
Например, в настройках немецкого языка (с естественным форматом даты: dd.mm.yyyy) запрос месяца должен быть изменен с 4,2 до 3,2:
Это мои 2 цента за datetime string . В системах MM DD YYYY переключается первая и вторая записи %DATE:
Я попробовал принятый ответ, и он работает очень хорошо. К сожалению, формат времени США выглядит как H: MM: SS.CS, а недостающее 0 на фронте вызывает проблемы с анализом до 10 часов утра. Чтобы преодолеть это препятствие, а также разрешить разбор большинства форматов мирового времени, я придумал эту простую процедуру, которая, похоже, работает достаточно хорошо.
Хорошая вещь с этой подпрограммой заключается в том, что вы передаете строку времени в качестве первого параметра и имя переменной среды, в которую вы хотите указать время (в секундах) в качестве второго параметра. Например:
Возможно, что-то вроде этого:
В таких ситуациях используйте простой, стандартный подход к программированию:
Вместо того, чтобы тратить огромные усилия на анализ неизвестного объекта, просто сохраните текущую конфигурацию, reset в известном состоянии, извлеките информацию и затем восстановите исходное состояние. Используйте только стандартные ресурсы Windows.
В частности, форматы даты и времени хранятся в разделе реестра
HKCU\Control Panel\International\in [MS definition] “values”: “sTimeFormat” и “sSortTate”.
Reg – это редактор реестра консоли, входящий в состав всех версий Windows.
Для изменения ключа HKCU не требуются повышенные привилегии
Простой, понятный и должен работать во всех регионах.
По причинам, которые я не понимаю, сброс значения “sShortDate” вступает в силу немедленно
консольное окно, но сброс очень похожего значения “sTimeFormat” не вступает в силу
пока не откроется новое окно консоли. Однако единственным изменчивым является разделитель –
позиции цифр фиксированы. Точно так же токен времени “HH” должен предусматривать предшествующие нули, но это не так.
К счастью, обходные пути легки.
Разделите результаты команды date косой чертой, затем вы можете переместить каждый из токенов в соответствующие переменные.
Для очень простого решения для числовой даты для использования в именах файлов используйте следующий код:
Используйте REG для сохранения/изменения/восстановления того, что когда-либо значения наиболее полезны для вашего bat файла. Это окна 7, для других версий вам может понадобиться другое имя ключа.