Windows scripting date format

Windows scripting date format

В этом уроке мы пройдём все функции VBScript для работы с датой и временем. Данные функции VBS дают нам возможность получить текущую дату и время, временные промежутки, создавать таймеры и многое другое, что не оставит Вас равнодушными.

Для того что бы получить текущую дату вашего компьютера используется функция «Date», а если Вам понадобиться по мимо даты вывести ещё и время, то надо использовать функцию «Now». Для возврата только времени — «Time».

Так же любой переменной мы можем задать свою дату. Для этого используется символ решётка (#). В данном случае дата прописывается в таком порядке: мм/дд/гггг. Можно так же присвоить время: чч.мм.сс . Давайте посмотрим на пример:

В результате у нас получилась интересная картина. Для переменной «my_date2» мы указали свою дату. Её мы записали, начиная с месяца, но когда мы получили значение переменной, то оказалось, что дата была показана учитывая настройки вашего компьютера. У меня в данном случае показало так: день-месяц-год.

С этим мы разобрались, а теперь рассмотрим функцию vbs — DateDiff. Она позволяет получить значение интервала двух дат. Для этого нам помогут следующие значения интервала:

  • yyyy — год
  • q — квартал
  • m — месяц
  • y — номер дня в году
  • d — день
  • w — номер дня в неделе
  • ww — номер недели в году
  • h — час
  • n — минута
  • s — секунда

Синтаксис функции: DateDiff(«Interval», Date1, Date2, FirstDayOfWeek , FirstWeekOfYear).

  • Interval — Показывает тип интервала, который мы хотим получить. Значения показаны выше.
  • Date1, Date2 — Две даты, между которыми вычисляется разница.
  • FirstDayOfWeek — Необязательный параметр. Определяет, с какого дня следует считать начало недели.
  • FirstWeekOfYear — Необязательный параметр. Указывает на ту неделю, которую следует считать первой в году.

Давайте посмотрим пример данной функции VBScript:

В данном примере всё понятно. Следует обратить внимание на то, что в качестве параметров Date1 и Date2 можно указывать строки. Во втором примере мы так и сделали и, VBS сам распознал, что мы указали дату.

Параметр FirstWeekOfYear может иметь такие значения:

  • vbFirstJan1 — неделя в которой есть 1 января.
  • vbFirstFourDays — использовать неделю, в которой как минимум четыре дня приходятся на новый год.
  • vbFirstFullWeek — первая полная неделя в году

Функция DateAdd

DateAdd позволяет добавить к заданной дате определённый промежуток или убрать этот промежуток.
Выглядит всё это дело так: DateAdd(«Iterval», Number, Date)

  • Iterval — мы проходили с функцией DateDiff.
  • Number — Число, которое надо добавить или вычесть.
  • Date — Дата, с которой работаем.

Вот простенький пример:

Функция DatePart

DatePart вернёт нам определённую часть даты: месяц, год, квартал, день и так далее.
Синтаксис функции: DatePart(«Interval», Date, FirstDayOfWeek , FirstWeekOfYear)

Функции: Hour, Minute, Month, Year, Second, TimeValue

  • Hour — данная функция vbs дат возможность получить число часов из указанного времени (от 0 до 23).
  • Minute — позволяет получить число минут из указанного времени (от 0 до 59).
  • Month — вернёт месяц указанной даты (от 1 до 12).
  • Day — возвращает номер дня указанного месяца (от 1 до 31).
  • Year — вернёт год указанной даты.
  • Second — вернёт количество секунд, указанной даты (от 0 до 59).
  • TimeValue — возвращает время указанной даты.

Сразу посмотрим пример:

Функция Timer

Данная функция возвращает количество секунд, прошедших с полуночи, с точностью до 1 миллисекунды. Немного смекалки и данная функция vbs позволяет нам узнать время выполнения кода c поразительной точностью. Давайте посмотрим пример с циклом While … Wend:

Перед началом цикла мы узнали, сколько секунд прошло с полуночи и сохранили это число в переменную «old_time». После завершения цикла мы ещё раз узнали сколько прошло секунд с полуночи, но по мимо этого, ещё и вычили предыдущее значение. Таким способом мы получили время, в секундах, затраченное на выполнения цикла vbs.

Функция TimeSerial и DateSerial

Функция TimeSerial позволяет преобразовать указанные значения в дату и время. Для этой функции указывают три значения через запятую, в круглых скобках: часы (от 0 до 23), минуты (от 0 до 59), секунды (от 0 до 59). Если какое либо значение превышает допустимый лимит, то это отражается на следующем значении.

Читайте также:  Диск erd commander для windows 10

Функция DateSerial — делает тоже самое, но только: год, месяц, день.

Здесь всё понятно.

Функция Weekday

Weekday позволяет нам получить номер дня недели указанной даты. Данная функция имеет такой вид: Weekday(date, FirstDayOfWeek), где date — это используемая дата; FirstDayOfWeek — это день недели, который нужно считать началом недели. Последний параметр не обязателен и может иметь такие значения:

  • vbUseSystemDayOfWeek — использовать настройки по умолчанию системы
  • vbSunday — воскресенье
  • vbMonday — понедельник
  • vbTuesday -вторник
  • vbWednesday — среда
  • vbThursday — четверг
  • vbFriday — пятница
  • vbSaturday — суббота

Вместо этих выражений можно использовать цифры (от 0 до 7).

В данном случае я указал начало недели с воскресенья и по этой причине вторник оказался третьем днём недели.

Функция WeekdayName

Замечательная функция VBScript. Она возвращает наименование указанного дня недели.
Функция имеет данный синтаксис: WeekdayName(Number, Abbr, FirstDayOfWeek).

  • Number — Номер дня недели
  • Abbr — использование или не использование аббревиатуры. Если True, то вернёт аббревиатуру, в противном случае — полное название
  • FirstDayOfWeek — уже выяснили.

Функция DateValue

Данная простенькая функция возвращает указанное значение имеющее тип Date. Ничем особым она не отличается.

Функция MonthName

Возвращает название указанного месяца. Так же можно сделать показ аббревиатуры как в функции WeekdayName.

Стоит обратить внимание на то, что месяц май не сокращается, а пишется лишь с маленькой буквы.

Функция FormatDateTime

Данная функция VBScript позволяет устанавливать формат даты и времени. Всего форматов 5. Описывать я их не буду, лучше взгляните сами.

Здесь всё понятно.

Функция IsDate

Данная функция проверяет корректность указанной даты. Если дата указана корректно, то функция вернёт True и False в противном случае.

Урок 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, и возвращает это целое число.

Спасибо за внимание. Автор блога Владимир Баталий

Windows batch: formatted date into variable

How do I save the current date in YYYY-MM-DD format into some variable in a Windows .bat file?

Unix shell analogue:

17 Answers 17

You can get the current date in a locale-agnostic way using

Then you can extract the individual parts using substrings:

Another way, where you get variables that contain the individual parts, would be:

Much nicer than fiddling with substrings, at the expense of polluting your variable namespace.

If you need UTC instead of local time, the command is more or less the same:

If you wish to achieve this using standard MS-DOS commands in a batch file then you could use:

I’m sure this can be improved upon further but this gives the date into 3 variables for Day (dd), Month (mm) and Year (yyyy). You can then use these later in your batch script as required.

While I understand an answer has been accepted for this question this alternative method may be appreciated by many looking to achieve this without using the WMI console, so I hope it adds some value to this question.

Use date /T to find the format on command prompt.

If the date format is Thu 17/03/2016 use like this:

6,2% – isapir Oct 13 ’17 at 20:56

Two more ways that do not depend on the time settings (both taken from How get data/time independent from localization). And both also get the day of the week and none of them requires admin permissions!:

MAKECAB — will work on EVERY Windows system (fast, but creates a small temporary file) (the foxidrive script):

ROBOCOPY — it’s not a native command for Windows XP and Windows Server 2003, but it can be downloaded from the Microsoft site. But it is built-in in everything from Windows Vista and above:

And three more ways that uses other Windows script languages. They will give you more flexibility e.g. you can get week of the year, time in milliseconds and so on.

JScript/BATCH hybrid (need to be saved as .bat ). JScript is available on every system from Windows NT and above, as a part of Windows Script Host (though can be disabled through the registry it’s a rare case):

VBScript/BATCH hybrid (Is it possible to embed and execute VBScript within a batch file without using a temporary file?) same case as jscript , but hybridization is not so perfect:

PowerShell — can be installed on every machine that has .NET — download from Microsoft (v1, v2, and v3 (only for Windows 7 and above)). Installed by default on everything form Windows 7/Win2008 and above:

Self-compiled jscript.net/batch (I have never seen a Windows machine without .NET so I think this is a pretty portable):

Logman This cannot get the year and day of the week. It’s comparatively slow, also creates a temp file and is based on the time stamps that logman puts on its log files.Will work everything from Windows XP and above. It probably will be never used by anybody — including me — but it is one more way.

I really liked Joey’s method, but I thought I’d expand upon it a bit.

In this approach, you can run the code multiple times and not worry about the old date value «sticking around» because it’s already defined.

Each time you run this batch file, it will output an ISO 8601 compatible combined date and time representation.

In this version, you’ll have to be careful not to copy/paste the same code to multiple places in the file because that would cause duplicate labels. You could either have a separate label for each copy, or just put this code into its own batch file and call it from your source file wherever necessary.

Just use the %date% variable:

As per answer by @ProVi just change to suit the formatting you require

EDIT As per @Jeb comment, whom is correct the above time format will only work if your DATE /T command returns

It is easy to edit to suit your locale however, by using the indexing of each character in the string returned by the relevant %DATE% environment variable you can extract the parts of the string you need.

10,4% would expand the DATE environment variable, and then use only the 4 characters that begin at the 11th (offset 10) character of the expanded result

For example if using US styled dates then the following applies

I set an environment variable to the value in the numeric format desired by doing this:

If you have Python installed, you can do

You can easily adapt the format string to your needs.

This is an extension of Joey’s answer to include the time and pad the parts with 0’s.

For example, the result will be 2019-06-01_17-25-36. Also note that this is the UTC time.

It is possible to use PowerShell and redirect its output to an environment variable by using a loop.

From the command line ( cmd ):

In a batch file you might escape %a as %%a :

Due to date and time format is location specific info, retrieving them from %date% and %time% variables will need extra effort to parse the string with format transform into consideration. A good idea is to use some API to retrieve the data structure and parse as you wish. WMIC is a good choice. Below example use Win32_LocalTime. You can also use Win32_CurrentTime or Win32_UTCTime.

I am using the following:

Or in combination with a logfile name ‘MyLogFileName’:

If powershell is available, you can use codes below:

Here is the result:

If you don’t mind an one-time investment of 10 to 30 minutes to get a reliable solution (that doesn’t depend on Windows’ region settings), please read on.

Let’s free our minds. Do you want to simplify the scripts to just look like this? (Assume you wants to set the LOG_DATETIME variable)

You can. Simply build a FormatNow.exe with C# .NET and add it to your PATH.

  1. You can use any Visual Studio edition, such as Visual Studio Express, to build the FormatNow.exe.
  2. In Visual Studio, choose the «Console Application» C# project, not «Windows Forms Application» project.
  3. Common sense: the built FormatNow.exe will need .NET Framework to run.
  4. Common sense: after adding FormatNow.exe to PATH variable, you need to restart CMD to take effect. It also applies to any change in environment variables.
  1. It’s not slow (finishes within 0.2 seconds).
  2. Many formats are supported https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx e.g. FormatNow «ddd» to get only the day of week, FormatNow «yyyy» to get only the year
  3. It doesn’t depend on Windows’ region settings, so its output is much more reliable. On the other hand, %date% doesn’t give a consistent format over different computers, and is not reliable.
  4. You don’t need to create so many CMD variables and pollute the variable namespace.
  5. It would require 3 lines in the batch script to invoke the program and get the results. It should be reasonably short enough.

Source code of FormatNow.exe which I built with Visual Studio 2010 (I prefer to build it myself to avoid the risk of downloading an unknown, possibly malicious program). Just copy and paste the codes below, build the program once, and then you have a reliable date formatter for all future uses.

In general, when dealing with complicated logics, we can make it simpler for by building a very small program and calling the program to capture the output back to a batch script variable instead. We are not students and we’re not taking exams requiring us to follow the batch-script-only rule to solve problems. In real working environment, any (legal) method is allowed. Why should we still stick to the poor capabilities of Windows batch script that needs workarounds for many simple tasks? Why should we use the wrong tool for the job?

Читайте также:  Не удается установить линукс
Оцените статью