Функции работы с временем с: Функции работы с датой и временем, временная задержка
Функции для работы со временем, датой и системные функции
Этот раздел содержит системно-зависимые функции. Среди функций, определяемых стандартом ANSI С, к ним относятся функции времени и даты.
В этом разделе также обсуждается категория функций, позволяющая осуществлять системный контроль низкого уровня. Ни одна из этих функций не определена стандартом ANSI С, поскольку все операционные среды отличаются друг от друга. Borland С++ обеспечивает широкий набор интерфейсных функций для DOS и BIOS. Эти функции применимы только к 16-разрядным программам, написанным для DOS (или исполняемым под DOS в среде Windows). Windows обеспечивает свой широкий набор интерфейсных функций, который называется Windows API (Application Programming Interface). Эти функции не описываются здесь.
Функции, оперирующие с временем и датой системы, требуют наличия заголовочного файла time.h, который содержит их прототипы. В этом заголовочном файле также определены два типа данных. Тип time_t дает возможность представления системного времени и даты в виде длинного целого. Об этих данных говорят как о календарном времени (calendar time). Структура типа tm содержит в своих полях дату и время. Структура tm определена следующим образом:
struct tm {
int tm_sec; /* секунды, 0-59 */
int tm_min; /* минуты, 0-59 */
int tm_hour; /* часы, 0-23 */
int tm_day; /* дни месяца */
int tm_mon; /* месяцы с января, 0-11 */
int tm_year; /* годы с 1900 */
int tm_wday; /* дни недели с воскресенья, 0-6 */
int tm_yday; /* дни с 1 января, 0-365 */
int tm_isdst; /* индикатор летнего/зимнего времени */
};
Значение tm_isdst будет положительным, если система находится в режиме летнего времени, равным нулю — если нет, и отрицательным — если данная информация отсутствует. Эта форма представления времени и даты называется раздельной (broken-down time).
Borland С++ содержит также несколько нестандартных функций времени и даты, которые входят в обычную систему времени и даты и более тесно связаны с DOS. Эти функции используют структуры обоих типов time и date, которые определены в заголовочном файле dos.h. Ниже приводятся их объявления:
struct date {
int da_year; /* год */
char da_day; /* день месяца */
char da_mon; /* месяц, январь=1 */
};
struct time {
unsigned char ti_min; /* минуты */
unsigned char ti_hour; /* часы */
unsigned char ti_hund; /* сотые доли секунды */
unsigned char ti_sec; /* секунды */
};
Функции интерфейса DOS требуют включения файла dos.h. Этот файл определяет объединение REGS, соответствующее регистрам семейства центральных процессоров серии 8086. Это объединение используется некоторыми функциями системного интерфейса. Оно определено как объединение двух структур с тем, чтобы позволить каждому регистру быть доступным как в виде слов так и в виде байт. Поскольку Borland С++ может компилировать код для обоих сред, как 16-разрядной так и 32-разрядной, то определение регистровых структур и объединения является достаточно сложным, чтобы удовлетворить обоим режимам. Однако для описываемых в этой главе функций требуется только 16-разрядная версия. Ниже показан 16-разрядный эквивалент этих структур.
struct WORDREGS
{
unsigned int ах, bx, сх, dx, si, di, cflag, flags;
};
struct BYTEREGS
{
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
};
union REGS {
struct WORDREGS x; struct BYTEREGS h;
};
В файле dos.h также определен тип SREGS, используемый некоторыми функциями для установки сегментных регистров. Ниже приведен его 16-битный эквивалент.
struct SREGS {
unsigned int es, cs, ss, ds;
};
Некоторые из описанных здесь функций являются прямым интерфейсом к ROM-BIOS — самому нижнему уровню операционной системы. Эти функции требуют заголовочного файла bios.h.
Некоторые функции требуют предопределенных структур, которые пока не обсуждались. Определения этих структур будут даны по мере надобности в них.
MICROSOFT-COBMECTИMЫE ФУНКЦИИ
Borland С++ содержит несколько дополнительных интерфейсных функций DOS и BIOS. Хотя Borland С++ определяет свой собственный набор интерфейсных функций DOS и BIOS, он также включает в себя версии функций, совместимых с Microsoft С++. Эти версии начинаются с _dos или _bios. Использование той или другой версии существенно только с точки зрения переносимости.
Существует также несколько других функций со слегка измененными именами, все вместе составляющие избыточный набор. Причиной для этого опять-таки является совместимость с Microsoft С++. В общем случае версии Microsoft этих функций начинаются с подчеркивания. Например, enable() является функцией Borland, a _enable() служит именем версии функции Microsoft, включенной для совместимости.
Функции работы со временем. Язык программирования Си для персонального компьютера
Функции работы со временем
Функция | Краткое описание |
asctime | преобразование времени из структуры (внутренней формы) в символьную строку |
ctime | преобразование времени из длинного целого (long int) в строку символов |
gmtime | преобразование времени из целого (int) в структуру |
localtime | преобразование времени из целочисленного (int) в структуру с локальной поправкой |
tzset | установить переменную времени из переменной времени среды |
Система программирования MSC предоставляет дополнительные функции:
Функция | Краткое описание |
ftime | получить текущее время системы как структуру |
time | получить текущее системное время как длинное целое (long int) |
utime | установить время изменения файла |
Система программирования ТС предоставляет дополнительные функции:
Функция | Краткое описание |
difftime | вычислить разность по времени |
dostounix | преобразование времени из формате ОС MS-DOS в формат ОС UNIX |
getdate | получить системную дату как структуру |
getftime | получить системную дату |
gettime | получить системное время как структуру |
setdate | установить системную дату |
setftime | установить системное время |
settime | установить системное время |
stime | установить системное время |
unixtodos | преобразовать время из формата ОС UNIX в формат ОС MS-DOS |
Функции time и ftime возвращают текущее время как число секунд, прошедших с 1 января 1970 Гринвичского Всемирного времени. Эта величина может быть преобразована, скорректирована и сохранена посредством функций asctime, ctime, gmtime и localtime.
Функция utime устанавливает время модификации для указанного файла, используя текущее время или значение времени, заданное в структуре.
Функция ftime требует включения двух файлов: sys ypes.h и sys imeb.h. Прототип функции ftime содержится в sys imeb.h.
Функция utime также требует включения двух файлов: sys ypes.h и sysutime.h. Прототип функции utime содержится в файле sysutime.h.
Прототипы функций dostounix, getdate, gettime, setdate, settime, unixtodos содержатся в файле dos.h.
Прототипы функций getftime и setftime определены в файле io.h.
Прототипы остальных функций работы со временем времени содержатся в файле time.h.
При использования функции ftime или localtime, чтобы сделать поправку для местного времени, необходимо определить переменную командного языка операционной системы TZ.
Поделитесь на страничке
Следующая глава >
Функции vbs для работы с датой и временем
В этой статье мы рассмотрим функции vbs для работы с датой и временем. Они позволяют получать значение текущей даты и времени, включать таймер для вычисления времени, затраченного на выполнение заданного блока кода. Извлекать по отдельности значения часов, минут и секунд из времени, или значения год, месяц и день из даты.
Хорошо, давайте приступим.
Функции vbs для работы с датой и временем
Date – позволяет получить текущую дату (число, месяц и год).
'*********************************** ' Текущая дата ' date.vbs '*********************************** MsgBox date |
DateAdd(iterval, number, date) – добавляет к заданной дате date заданный промежуток iterval:
interval — параметр определяет тип интервала, является строковой константой и может принимать следующие значения:
- yyyy — год;
- q — квартал;
- m — месяц;
- y — номер дня в году;
- d — день;
- w — номер дня в неделе;
- ww — номер недели в году;
- h — час;
- n — минута;
- s — секунда;
number – определяет число интервалов, параметр принимает как положительные, так и отрицательные значения. Если передано дробное число, то оно округлится.
'*********************************** ' Отсчет даты ' dateadd.vbs '*********************************** dim my_date my_date = #10/05/2000# ' назад на 4 месяца MsgBox dateadd("m",-4,my_date) '05.06.2000 ' вперед на 222 000 часов MsgBox dateadd("h",222000,my_date) '01.02.2026 |
DateDiff(interval, date1, date2[, firstdayofweek [, firstweekofyear]]) – позволяет получить значение временных интервалов (interval — параметр описан в функции vbs AddDate). Аргументы date1, date2 – те даты, между которыми вычисляется разница. firstdayofweek – позволяет указать, с какого дня нужно считать начало недели, firstweekofyear — это константа, показывающая, какую неделю следует считать первой в году.
Скачать архив с примерами
'*********************************** ' интервал ' DateDiff.vbs '*********************************** dim my_date_1, my_date_2 my_date_1 = #10/05/2000# my_date_2 = #10/05/2012# ' промежуток 4383 дня MsgBox DateDiff("d", my_date_1, my_date_2) ' промежуток в 24 часа MsgBox DateDiff("h", "20/10/2000", "21/10/2000") |
DatePart(interval, date [, firstdayofweek [, firstweekofyear]]) – возвращает указанную часть даты, например день, месяц и так далее.
'*********************************** ' парсинг даты ' DatePart.vbs '*********************************** dim my_date dim y, m, d dim list my_date = date ' год y = DatePart("yyyy", my_date) ' месяц m = DatePart("m", my_date) ' день d = DatePart("d", my_date) list="" & "год:" & vbTab & y & vbCrLf list=list & "месяц:" & vbTab & m & vbCrLf list=list & "день:" & vbTab & d MsgBox list |
DateValue(date) – в этой функции vbs происходит проверка на корректную дату.
'*********************************** ' Проверка на дату ' DateValue.vbs '*********************************** dim my_date dim y, m, d dim list my_date = date MsgBox DateV иalue(my_date) 'вернет текущую дату MsgBox DateValue("20, сентябрь, 2000") '20.09.2000 MsgBox DateValue("20,05,2000") '20.05.2000 MsgBox DateValue(20062012) 'Ошибка |
Hour(time) – данная vbs функция позволяет извлечь значение часа из передаваемого параметра time. Возвращается целое число в диапазоне от 0 до 23.
'*********************************** ' Получаем число часов ' hour.vbs '*********************************** dim date_1, date_2, date_3 date_1 = date date_2 = "22:33" date_3 = #15/10/2013 11:25# MsgBox hour(date_1) '0 MsgBox hour(date_2) '22 MsgBox hour(date_3) '11 |
Minute(time) – аналог Hour(), только вернёт число минут в диапазоне от 0 до 59.
'*********************************** ' Получаем количество минут ' Minute.vbs '*********************************** dim date_1, date_2, date_3 date_1 = date date_2 = "22:33" date_3 = #15/10/2013 11:25# MsgBox minute(date_1) '0 MsgBox minute(date_2) '33 MsgBox minute(date_3) '25 |
Month(date) — выделяет номер месяца из даты, заданной параметром date. Возвращает целое число от 1 до 12.
'*********************************** ' Определяем номер месяца ' Month.vbs '*********************************** dim date_1, date_2, date_3 date_1 = date date_2 = "22:33" date_3 = #15/10/2013 11:25# MsgBox month(date_1) 'текущий месяц MsgBox month(date_2) '12 MsgBox month(date_3) '10 |
MonthName(month [, abbr]) – позволяет получить наименование месяца. Параметр month – целое значение в диапазоне от 1 до 12 (номер месяца), параметр abbr – булево значение, если установлено true – краткий формат, если false – полный формат, по умолчанию — false.
'*********************************** ' Имя месяца ' MonthName.vbs '*********************************** MsgBox MonthName(5,true) ' май MsgBox MonthName(5,false) ' Май |
Now – аналогично функции vbs Date, но помимо текущей даты возвращает и время.
'*********************************** ' Получение текущей даты и времени ' Now.vbs '*********************************** dim date_1, date_2 date_1 = date date_2 = now MsgBox date_1 ' вернет дату MsgBox date_2 ' вернет дату и время |
Time – собственно, вернёт текущее системное время.
'*********************************** ' Системное время ' Time.vbs '*********************************** Option Explicit dim cur_time cur_time = time MsgBox cur_time |
Timer – вернёт количество прошедших с полуночи секунд (точность до 1 миллисекунды, три знака после комы). Удобно использовать для вычисления времени, затраченного на выполнение блока кода.
'*********************************** ' Таймер ' Timer.vbs '*********************************** Option Explicit Dim Old_Time, Time_Elapsed, N, I Old_Time = Timer N = 0 For I = 1 To 100000 N = N + 1 Next Time_Elapsed = Timer - Old_Time ' Время выполнения цикла MsgBox "Цикл выполнялся " & Time_Elapsed |
TimeSerial(hour, minute, second) – вернёт тип Вариант подтипа Date с указанным временем, тут параметр hour – часы, диапазон от 0 до 23, minute – минуты, диапазон от 0 до 59, second – секунды, от 0 до 59. Если значение параметра превышает заданный предел, то это повлияет на следующий параметр.
'*********************************** ' Задаем время ' TimeSerial.vbs '*********************************** Option Explicit Dim my_time_1, my_time_2 my_time_1 = TimeSerial(12,30,25) my_time_2 = TimeSerial(30,-50,25) MsgBox my_time_1 & vbCrLf & my_time_2 |
TimeValue(time) — вернёт переменную подтипа Date, которая соответствует времени, заданному параметром time. Параметр time может содержать строку, литерал времени или тип Дата.
'*********************************** ' вернуть значение времени ' TimeValue.vbs '*********************************** Option Explicit Dim a, b, c a = now b = "20.12.13 22:33" c = #10/10/2010# MsgBox TimeValue(a) & vbCrLf & TimeValue(b) & VbCrLf & TimeValue(c) |
Weekday(date[, firstdayofweek]) — возвращает номер дня недели для даты, заданной параметром date. Параметр firstdayofweek — это константа, показывающая, какой из дней недели следует считать первым.
'*********************************** ' получаем номер недели ' Weekday.vbs '*********************************** Option Explicit Dim WD WD = Weekday(#02/12/1976#, vbMonday) ' WD = 4 -- четверг MsgBox WD |
WeekdayName(weekday [, abbr[, firstdayofweek]]) — возвращает наименование для дня недели с порядковым номером weekday. Если логический параметр abbr равен true, то наименование дня недели представляется в виде аббревиатуры, в противном случае — в полном виде. Значение параметра firstdayofweek здесь то же, что и в функции Weekday.
'*********************************** ' получаем имя дня недели ' WeekdayName.vbs '*********************************** Option Explicit Dim MyDate MyDate = WeekdayName(4, False, vbMonday) ' Вернет "четверг" MsgBox MyDate |
Year(date) — выделяет год из даты, заданной параметром date, и возвращает это целое число.
'*********************************** ' вернуть номер года ' Year.vbs '*********************************** Option Explicit Dim a, b, c a = now b = "20.12.13 22:33" c = #10/10/2010# MsgBox Year(a) & vbCrLf & Year(b) & VbCrLf & Year(c) |
Функции VBA для работы с датой/временем
Функции VBA для работы с датой/временем | Excel для всех
Главная » Функции VBA »
28 Апрель 2011 Дмитрий 251479 просмотров
- Date() — возвращает текущую системную дату. Установить ее можно при помощи одноименного оператора, например, так:
- Time() — возвращает текущее системное время
- Now() — возвращает дату и время вместе.
- DateAdd() — возможность добавить к дате указанное количество лет, кварталов, месяцев и так далее — вплоть до секунд. Интервалы(год, месяц и т.д.) указываются в текстовом формате. Список допустимых значений:
«yyyy» Год
«q» Квартал
«m» Месяц
«y» День года
«d» День
«w» День недели
«ww» Неделя
«h» Час
«n» Минута
«s» Секунда
Сам синтаксис обращения незамысловат. Сначала указываем интервал, затем сколько единиц добавить и самый последний аргумент — к какой дате(включая время, кстати). Например, чтобы добавить 3 года к текущей дате-времени, надо записать функцию так:
MsgBox DateAdd(«yyyy», 3, Now)
Но что интереснее — можно не только добавлять, но и отнимать. Функция не изменится, мы просто должны записать кол-во добавляемых периодов со знаком минус. Отнимем три года от текущей даты-времени:
MsgBox DateAdd(«yyyy», -3, Now) - DateDiff() — возможность получить разницу между датами (опять таки в единицах от лет до секунд).
Dim lDaysCnt As Long lDaysCnt = DateDiff("d", "20.11.2012", Now) MsgBox "С 20.11.2012 прошло дней: " & lDaysCnt
Dim lDaysCnt As Long
lDaysCnt = DateDiff(«d», «20.11.2012», Now)
MsgBox «С 20.11.2012 прошло дней: » & lDaysCntПервый аргумент определяет период времени, в котором необходимо вернуть разницу между датами. Допустимые значения:
«yyyy» Год
«q» Квартал
«m» Месяц
«y» День года
«d» День
«w» День недели
«ww» Неделя
«h» Час
«n» Минута
«s» Секунда
Наиболее полезна DateDiff при вычислении полных лет. Например, чтобы вычислить сколько лет на текущий момент человеку, в зависимости от даты рождения, можно использовать функцию так:MsgBox DateDiff("yyyy", "20.12.1978", Now)
MsgBox DateDiff(«yyyy», «20.12.1978», Now)
Без этой функции вычислить кол-во полных лет гораздо сложнее.
- DatePart() — функция возвращает указанную часть даты (например, только год, только месяц или только день недели), на основании заданной даты. Часто применяется для получения номера недели для даты.
Первый аргумент — период времени. Принимаемые значения те же, что и для функции DateDiff(годы, месяцы, недели и т.д.)
Второй аргумент — непосредственно дата, часть которой необходимо получить:MsgBox "Номер недели года: " & DatePart("ww", Now)
MsgBox «Номер недели года: » & DatePart(«ww», Now)
- DateSerial() — возможность создать значение даты, задавая месяц, год и день числовыми значениями:
- DateValue()— делает то же, что и DateSerial(). Отличия — в формате принимаемых значений. Эта функция в качестве аргумента принимает дату в текстовом формате и преобразует её в формат даты:
MsgBox DateValue("07.06.12")
MsgBox DateValue(«07.06.12»)
Аналогичным образом (для времени) работают TimeSerial() и TimeValue()
- Day(), Year(), Month(), Weekday(), Hour(), Minute(), Second() — специализированные заменители функции DatePart(), которые возвращают нужную часть даты/времени (которую именно — видно из названия).
- MonthName() — возвращает имя месяца словами по его номеру. Возвращаемое значение зависит от региональных настроек. Если они русские, то вернется русское название месяца.
- Timer() — возвращает количество секунд, прошедших с полуночи.
MsgBox DateSerial(2012, 6, 7) |
MsgBox DateSerial(2012, 6, 7)
Статья помогла? Сделай твит, поделись ссылкой с друзьями!
Юридическая информация
Так же с этой статьей читают:
Наши партнеры
Спасибо за сообщение
Ваше сообщение было получено и отправлено администратору.
Работа с датой и временем в MQL4: полезные функции и переменные
Переменная datetime представлена как количество секунд, прошедших с 1 января 1970 года. Например, 15 июня 2009 года в 0:00 будет представлено как 1245024000. Преимущество формата datetime заключается в том, что он позволяет упростить вычисления с временем и математические операции.
Например, если вы хотите проверить, наступает ли одна дата до или после другой, вы должны выполнить простую операцию. Предположим, что StartDate – 15 июня 2009 года в 14:00, а EndDate – 16 июня 2009 года в 5:00.
if (StartDate < EndDate) // Результат равен true if (StartDate > EndDate) // Результат равен false
Другое преимущество состоит в том, что вы можете добавлять или вычитать время из определенной даты, просто добавляя или вычитая соответствующее количество секунд. Если вы хотите добавить 24 часа в StartDate, просто добавьте количество секунд:
datetime AddDay = StartDate + 86400;
Если вы планируете много математических манипуляций с переменными даты и времени, было бы неплохо объявить некоторые целочисленные константы для представления определенных единиц времени:
#define SEC_h2 3600 // Секунды в часе #defineSEC_D186400 // Секунды в течение дня
Недостатком формата datetime является то, что он не очень читабелен. Вы не можете просмотреть значение, например 1245024000, и автоматически сказать, что оно представляет 15 июня 2009 г. 0:00. Для этого мы используем функции преобразования даты и времени.
Константы даты и времени
Константа datetime – это дата и время, представленные в следующем формате: yyyy.mm.dd hh:mm. Например, 15 июня 2009 года в 0:00 будет 2009.06.15 00:00.
Чтобы преобразовать переменную datetime в строковую константу, используйте функцию TimeToStr(). Вот ее синтаксис:
string TimeToStr (datetime Time, int Output = TIME_DATE | TIME_MINUTES);
- Time – переменная дата-время, выраженная в количестве секунд, прошедших с 1 января, 1970.
- Output – необязательный параметр, который выводит константу только в виде даты, часа и минуты, часа, минуты и секунды или любая другой комбинации даты и времени. Допустимые значения ввода:
TIME_DATE – выводит дату, например, 2009.06.15
TIME_MINUTES – выводит часы и минуты, например, 05:30
TIME_SECONDS – выводит часы, минуты и секунды, например, 05:30:45
Чтобы вывести строковую константу в формате по умолчанию yyyy.mm.dd hh: mm, оставьте поле Output пустым. Если вам нужна только дата, либо часы и минуты (или секунды), используйте соответствующий аргумент. В этом примере мы предположим, что StartTime равен 2009.06.15 05:30:45.
TimeToStr (StartTime, TIME_DATE) // Возвращает "2009.06.15" TimeToStr (StartTime, TIME_SECONDS) // Возвращает "05:30:45" TimeToStr (StartTime, TIME_MINUTES) // Возвращает "05:30" TimeToStr (StartTime, TIME_DATE | TIME_SECONDS) // Возвращает «2009.06.15 05:30:45» TimeToStr (StartTime) // Возвращает «2009.06.15 05:30»
Мы можем создать константу даты и времени, используя конкатенацию строк, и преобразовать ее в переменную даты и времени, используя функцию StrToTime(). Синтаксис идентичен TimeToStr() выше, но без параметра Output. Строковая константа должна быть в формате yyyy.mm.dd hh: mm для правильного преобразования.
Сначала мы объявим некоторые внешние переменные для установки времени и даты:
extern int UseMonth = 6; extern int UseDay = 15; extern int UseHour = 5; extern int UseMinute = 30;
Затем мы создаем строковую константу, используя функцию StringConcatenate(), и, наконец, преобразуем строку в формат datetime, используя StrToTime().
string DateConstant = StringConcatenate (Year (), ".", UseMonth, ".", UseDay, "", UseHour, ":", UseMinute); // DateConstant равен "2009.6.15 05:30" datetime StartTime = StrToTime (DateConstant); // StartTime равен "1245043800"
Обратите внимание, что в функции StringConcatenate() мы используем Year() для возврата текущего года вместо использования внешней переменной. Вы можете использовать такие функции, как Month(), Day() и т. д.
Функции для работы с датой и временем
Существует две функции, которые возвращают текущее время: TimeCurrent() возвращает текущее время сервера, а TimeLocal() возвращает время вашего локального компьютера. Возможно, вы захотите создать логическую внешнюю переменную:
extern bool UseLocalTime = true;
Вот код для назначения текущего локального или текущего времени сервера переменной с именем CurrentTime.
if (UseLocalTime == true) datetime CurrentTime = TimeLocal (); // Местное время else CurrentTime = TimeCurrent(); // Время сервера
Иногда вам может понадобиться получить часть текущего времени, например, час или день. Вот список наиболее полезных функций, которые вы можете использовать для возврата значений текущего времени. Все эти функции используют время сервера, а не время вашего локального компьютера. Возвращаемое значение имеет тип integer:
- Year() – текущий год, например, 2009.
- Month() – текущий месяц года от 1 по 12.
- Day() – текущий день месяца с 1 по 31.
- DayOfWeek() – целое число, представляющее текущий день недели. Воскресенье – 0, понедельник – 1, пятница – 5 и т. д.
- Hour() – текущий час за 24 часа, с 0 до 23. Например, 3 часа ночи – 3, а 3 часа дня – 15.
- Minute() – текущая минута от 0 до 59.
Вы также можете получить эти значения из любой переменной datetime, используя другой набор функций. Эти функции требуют переменную datetime в качестве единственного параметра, но в остальном работают так же, как функции выше. Если вы хотите извлечь значение времени из TimeLocal(), используйте выходные данные функции TimeLocal() в качестве аргумента для следующих функций:
- TimeYear() – четырехзначный год указанного значения даты и времени.
- TimeMonth() – месяц указанного значения даты и времени от 1 до 12.
- TimeDay() – день месяца указанного значения datetime от 1 до 31.
- TimeDayOfWeek() – целое число, представляющее день недели указанного значения даты и времени. Воскресенье – 0, понедельник – 1, пятница – 5 и т. д.
- TimeHour() – час указанного значения даты и времени в 24-часовом времени от 0 до 23.
- TimeMinute() – минута указанного значения даты и времени от 0 до 59.
Вот несколько примеров использования этих функций. Предположим, что TimeLocal() равен 2009.06.15 05:30.
datetime CurrentTime = TimeLocal (); int GetMonth = TimeMonth (CurrentTime); // возвращает 6 int GetHour = TimeHour (CurrentTime); // возвращает 5 int GetWeekday = TimeDayOfWeek (CurrentTime); // Возвращает 1 или понедельник
Создание простого таймера
Одна очень удобная вещь, которую мы можем сделать со временем и датой в MQL, – это добавить таймер к нашему советнику. Некоторым трейдерам нравится ограничивать свою торговлю наиболее активными часами дня, такими как лондонская и нью-йоркская сессии. Другие, возможно, пожелают избежать торговли во время нестабильных рыночных событий.
Чтобы создать таймер, нам нужно указать время начала и время окончания. Мы будем использовать внешние целочисленные переменные для ввода параметров времени. Мы создадим строку с константой datetime и преобразуем ее в переменную datetime. Затем мы сравним время начала и окончания с текущим временем. Если текущее время больше времени начала, но меньше времени окончания, торговля будет разрешена.
Вот внешние переменные, которые мы будем использовать. Мы установим переменную для включения и выключения таймера, а также для выбора текущего времени (серверное или локальное). У нас есть настройки месяца, дня, часа и минуты для времени начала и окончания:
extern bool UseTimer = true; extern bool UseLocalTime = false; extern int StartMonth = 6; extern int StartDay = 15; extern int StartHour = 7; extern int StartMinute = 0; extern int EndMonth = 6; extern int EndDay = 15; extern int EndHour = 2; extern int EndMinute = 30;
Вот код для проверки. Переменная TradeAllowed определяет, открывать ли новые сделки. Если UseTimer установлено в false, TradeAllowed автоматически устанавливается в true. В противном случае мы оцениваем время начала и окончания по отношению к текущему времени, чтобы узнать, разрешим мы торговать или нет.
if(UseTimer == true) { // Конвертируем время начала string StartConstant = StringConcatenate(Year(),".",StartMonth,".",StartDay," ",StartHour,":",StartMinute); datetime StartTime = StrToTime(StartConstant); if(StartMonth == 12 && StartDay == 31 && EndMonth == 1) int EndYear = Year() + 1; else EndYear = Year(); // Конвертируем время окончания string EndConstant = StringConcatenate(EndYear,".",EndMonth,".",EndDay," ",EndHour,":",EndMinute); datetime EndTime = StrToTime(EndConstant); // Выбираем локальное или серверное время if(UseLocalTime == true) datetime CurrentTime = TimeLocal(); else CurrentTime = TimeCurrent(); // Проверяем условия торговли if(StartTime <= CurrentTime && EndTime > CurrentTime) { bool TradeAllowed = true; } else TradeAllowed = false; } else TradeAllowed = true;
Мы начинаем с преобразования нашего времени начала в переменную datetime StartTime. Оператор if (StartMonth == 12 && StartDay == 31 && EndMonth == 1) проверяет, является ли начальная дата последним днем года, и является ли конечный день первым первого следующего года. Если это так, он автоматически увеличивает конечный год на 1. В противном случае мы используем текущий год для EndYear.
Затем мы конвертируем время окончания в переменную datetime EndTime и выбираем, какой CurrentTime мы хотим использовать, серверный или локальный. Последний блок if проверяет, находится ли текущее время между временем начала и окончания. Если это так, TradeAllowed имеет значение true.
Теперь нам нужно добавить код для контроля исполнения сделки. Самый простой способ сделать это – добавить блок if вокруг процедуры открытия ордеров:
// Начало торговли if(TradeAllowed == true) { // Ордер на покупку if(FastMA > SlowMA && BuyTicket == 0 && BuyOrderCount(Symbol(),MagicNumber) == 0) { } // Ордер на продажу if(FastMA < SlowMA && SellTicket == 0 && SellOrderCount(Symbol(),MagicNumber) == 0) { } }
Существует много других способов создания таймеров – например, вы можете использовать день недели вместо месяца и дня или установить время торговли относительно текущего дня.
Исполнение кода на открытии бара
По умолчанию советники работают в режиме реального времени на каждом тике. Но в некоторых случаях лучше проверять торговые условия только один раз за бар. Дождавшись закрытия текущего бара, мы можем быть уверены, что условие выполнено и торговый сигнал действителен. При совершении сделок в режиме реального времени мы можем быть более восприимчивы к ложным сигналам.
Торговля один раз за бар также означает, что результаты в тестере стратегий будут более точными и актуальными. Из-за ограничений, присущих тестеру стратегий MetaTrader, использование «каждого тика» в качестве модели тестирования приведет к ненадежным результатам бэк-тестирования из-за того, что тики часто моделируются из данных М1. Сделки, которые происходят в реальной торговле, не обязательно будут соответствовать сделкам, совершенным в тестере стратегий.
Разместив наши сделки на закрытии на баре и используя в качестве модели тестирования «Только цены открытия», мы можем получить результаты тестирования, которые более точно отражают сделки в реальном времени. Недостаток торговли один раз за бар заключается в том, что сделки могут быть выполнены более поздно, особенно если в течение бара происходит сильное движение цены.
Чтобы проверить торговые условия один раз за бар, мы должны изучить отметку времени текущего бара. Мы сохраним эту метку времени в глобальной переменной. После каждого выполнения советника мы будем сравнивать сохраненную метку времени с текущей меткой времени. Как только отметка времени текущего бара изменится, показывая, что новый бар открылся, мы проверим торговые условия.
Мы также должны отрегулировать параметр сдвига функций нашего индикатора, функции цены и массивы, чтобы вернуть значение предыдущего бара. Если функция индикатора или ценовой массив настроены на проверку текущего бара, вместо этого мы сместим индекс бара на 1, чтобы проверить предыдущий бар. Все индикаторы и ценовые массивы должны иметь свои параметры сдвига, увеличенные на 1.
Технически, мы проверяем торговые условия на первом тике нового бара, одновременно изучая значение закрытия предыдущего бара.
Вот код, чтобы проверить открытие нового бара. Сначала мы объявляем внешнюю переменную с именем CheckOncePerBar для включения и выключения этой функции. Затем мы объявляем глобальную переменную datetime для хранения метки времени текущего бара – это будет CurrentTimeStamp.
В функции init() мы назначим метку времени текущего бара для CurrentTimeStamp.
// Внешние переменные extern bool CheckOncePerBar = true; // Глобальные переменные datetime CurrentTimeStamp; // Init функция int init() { CurrentTimeStamp = Time[0]; }
Вот код, который идет в начале нашей функции start() сразу после таймера. Целочисленная переменная BarShift будет определять, устанавливать ли значение Shift нашего индикатора и функции цены на текущий или предыдущий бар. Булевая переменная NewBar определит, будем ли мы проверять наши условия торговли:
if(CheckOncePerBar == true) { int BarShift = 1; if(CurrentTimeStamp != Time[0]) { CurrentTimeStamp = Time[0]; bool NewBar = true; } else NewBar = false; } else { NewBar = true; BarShift = 0; }
Если CheckOncePerBar установлен в true, мы сначала установим BarShift в 1. Это установит параметр Shift всех функций индикатора / цены на предыдущий бар.
Затем мы сравниваем значение переменной CurrentTimeStamp с Time [0], который является отметкой времени текущего бара. Если эти два значения не совпадают, мы присвоим значение Time [0] для CurrentTimeStamp и установим для NewBar значение true. Торговые условия будут проверены вскоре после этого.
При последующих запусках CurrentTimeStamp и Time[0] будут совпадать, что означает, что NewBar будет установлен в false. Торговые условия не будут проверяться, пока не откроется новый бар. После открытия нового бара значение Time[0] будет отличаться от значения CurrentTimeStamp, а для NewBar будет установлено значение true.
Если CheckOncePerBar установлен в false, NewBar автоматически будет установлен в true, а BarShift будет установлен в 0. Это будет проверять торговые условия на каждом тике, как и раньше.
Переменную BarShift нужно будет присвоить параметру Shift любых функций индикатора, функций цены или массивов, которые ссылаются на самый последний бар. Вот несколько примеров того, как это будет применяться:
double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,BarShift); if(Close[BarShift] > Open[BarShift]) double UseLow = iLow(NULL,0,BarShift);
Вместо того, чтобы проверять текущий бар, мы будем проверять только что закрытый бар, то есть предыдущий бар. Если вам нужно сослаться на бар, предшествующий последнему закрытому бару, просто добавьте текущий параметр сдвига в BarShift:
double LastFastMA = iMA(NULL,0,FastMAPeriod,0,0,0,BarShift+1);
Если вы не ожидаете когда-либо запускать свой советник один раз за бар, вам не нужно будет добавлять этот код. Но для многих торговых систем, основанных на индикаторах, это может сделать ваши результаты торговли и бэк-тестирования более надежными.
Чтобы контролировать исполнение сделок, нам нужно проверить значение NewBar перед процедурой размещения ордера. Мы можем сделать это, используя блок if, который мы поместили ранее для таймера:
// Начало торговли if(TradeAllowed == true && NewBar == true) { // Ордер на покупку if(FastMA > SlowMA && BuyTicket == 0 && BuyOrderCount(Symbol(),MagicNumber) == 0) { } // Ордер на продажу if(FastMA < SlowMA && SellTicket == 0 && SellOrderCount(Symbol(),MagicNumber) == 0) { } }
Главные методы модуля time в python 3, шаблоны и примеры ~ PythonRu
В Python есть модуль time
, который используется для решения задач, связанных со временем. Для использования определенных в нем функций необходимо сначала его импортировать:
import time
Дальше перечислены самые распространенные функции, связанные со временем.
Python time.time()
Функция time()
возвращает число секунд, прошедших с начала эпохи. Для операционных систем Unix 1 января 1970, 00:00:00
(UTC) — начало эпохи (момент, с которого время пошло).
import time
seconds = time.time()
print("Секунды с начала эпохи =", seconds)
Python time.ctime()
Функция time.ctime()
принимает в качестве аргумента количество секунд, прошедших с начала эпохи, и возвращает строку, представляющую собой местное время.
import time
seconds = 1575721830.711298
local_time = time.ctime(seconds)
print("Местное время:", local_time)
Если запустить программу, то вывод будет выглядеть так:
Местное время: Sat Dec 7 14:31:36 2019
Python time.sleep()
Функция sleep()
откладывает исполнение текущего потока на данное количество секунд.
import time
print("Сейчас.")
time.sleep(2.4)
print("Через 2.4 секунды.")
Прежде чем переходить к другим функциям, связанных со временем, нужно вкратце разобраться с классом time.struct_time
.
Класс time.struct_time
Некоторые функции в модуле time
, такие как gmtime()
, asctime()
и другие, принимают объект time.struct_time
в качестве аргумента или возвращают его.
Подписывайтесь на телеграм каналы
Вот пример объекта time.struct_time
.
Индекс | Атрибут | Значения |
---|---|---|
0 | tm_year | 0000, …, 2019, …, 9999 |
1 | tm_mon | 1, 2, …, 12 |
2 | tm_mday | 1, 2, …, 31 |
3 | tm_hour | 0, 1, …, 23 |
4 | tm_min | 0, 1, …, 59 |
5 | tm_sec | 0, 1, …, 61 |
6 | tm_wday | 0, 1, …, 6; Monday is 0 |
7 | tm_yday | 1, 2, …, 366 |
8 | tm_isdst | 0, 1 or -1 |
К значениям (элементам) объекта time.struct_time
доступ можно получить как с помощью индексов, так и через атрибуты.
Python time.localtime()
Функция localtime()
принимает в качестве аргумента количество секунд, прошедших с начала эпохи, и возвращает stuct_time
в локальном времени.
import time
result = time.localtime(1575721830)
print("результат:", result)
print("\nгод:", result.tm_year)
print("tm_hour:", result.tm_hour)
Вывод этой программы будет следующим:
result: time.struct_time(tm_year=2019, tm_mon=12, tm_mday=7, tm_hour=14, tm_min=30, tm_sec=30, tm_wday=5, tm_yday=341, tm_isdst=0)
year: 2019
tm_hour: 14
Если localtime()
передан аргумент None
, то вернется значение из time()
.
Python time.gmtime()
Функция gmtime()
принимает в качестве аргумента количество секунд, прошедших с начала эпохи и возвращает struct_time
в UTC.
import time
result = time.gmtime(1575721830)
print("результат:", result)
print("\nгод:", result.tm_year)
print("tm_hour:", result.tm_hour)
Вывод этой программы будет следующим:
result: time.struct_time(tm_year=2019, tm_mon=12, tm_mday=7, tm_hour=12, tm_min=30, tm_sec=30, tm_wday=5, tm_yday=341, tm_isdst=0)
year: 2019
tm_hour: 12
Если gmtime()
передан аргумент None
, то вернется значение time()
.
Python time.mktime()
Функция mktime()
принимает struct_time
(или кортеж, содержащий 9 значений, относящихся к struct_time
) в качестве аргумента и возвращает количество секунд, прошедших с начала эпохи, в местном времени. Это функция, обратная localtime()
.
import time
t = (2019, 12, 7, 14, 30, 30, 5, 341, 0)
local_time = time.mktime(t)
print("Местное время:", local_time)
Следующий пример показывает, как связаны mktime()
и localtime()
.
import time
seconds = 1575721830
t = time.localtime(seconds)
print("t1: ", t)
s = time.mktime(t)
print("\ns:", seconds)
Вывод будет следующий:
t1: time.struct_time(tm_year=2019, tm_mon=12, tm_mday=7, tm_hour=14, tm_min=30, tm_sec=30, tm_wday=5, tm_yday=341, tm_isdst=0)
s: 1575721830
Python time.asctime()
Функция asctime()
принимает struct_time
(или кортеж, содержащий 9 значений, относящихся к struct_time
) в качестве аргумента и возвращает строку, представляющую собой дату.
Например:
import time
t = (2019, 12, 7, 14, 30, 30, 5, 341, 0)
result = time.asctime(t)
print("Результат:", result)
Вывод:
Результат: Sat Dec 7 14:30:30 2019
Python time.strftime()
Функция strftime
принимает stuct_time
(или соответствующий кортеж) в качестве аргумента и возвращает строку с датой в зависимости от использованного формата. Например:
import time
named_tuple = time.localtime()
time_string = time.strftime("%m/%d/%Y, %H:%M:%S", named_tuple)
print(time_string)
Вывод будет следующий:
12/07/2019, 15:01:09
Здесь %Y
, %m
, %d
, %H
и другие — элементы форматирования.
%Y
— год [0001,…, 2019, 2020,…, 9999]%m
— месяц [01, 02, …, 11, 12]%d
— день [01, 02, …, 30, 31]%H
— час [00, 01, …, 22, 23%M
— минута [00, 01, …, 58, 59]%S
— секунда [00, 01, …, 58, 61]
Python time.strptime()
Функция strptime()
делает разбор строки python, в которой упоминается время и возвращает struct_time
.
import time
time_string = "15 June, 2019"
result = time.strptime(time_string, "%d %B, %Y")
print(result)
Вывод:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=166, tm_isdst=-1)
Время в Excel. Основы работы
В профессиональной работе с электронными таблицами нередко приходится взаимодействовать с датой и временем. Без этого не получится обойтись. Поэтому научиться работать с данными этого типа сам Бог велел. Это поможет сэкономить огромное количество времени и предотвратить множество ошибок во время работы с электронными таблицами.
К сожалению, много новичков не знает, каким образом обрабатываются данные. Поэтому перед тем, как рассматривать этот класс операций, нужно провести более детальный ликбез.
Как представляется дата в Excel
Обработка информации о дате осуществляется, как о количестве суток с 0 января 1900 года. Да, вы не ошиблись. Действительно, с нулевого числа. Но это необходимо для того, чтобы была точка отсчета, чтобы уже 1 января считалось цифрой 1 и так далее. Максимально поддерживаемое значение, обозначающее дату – 2958465, что в свою очередь являет собой 31 декабря 9999 года.
Этот метод дает возможность использовать даты для расчетов и формул. Так, Excel дает возможность определить количество суток между датами. Схема проста: из одного числа вычитается второе, а потом полученное значение переводится в формат даты.
Для большей наглядности, вот таблица, где показаны даты с соответствующими им числовыми значениями.
Чтобы определить количество дней, которое прошло от даты А до даты B, необходимо от последней отнять первую. В нашем случае это формула =B3-B2. После ее ввода результат оказывается следующий.
Важно обратить внимание, что значение представлено в днях, потому что мы выбрали для ячейки формат, отличающийся от даты. Если бы мы выбрали изначально формат «Дата», то результат был бы таким.
Важно обратить внимание на этот момент в своих расчетах.
То есть, для отображения правильного порядкового номера, полностью соответствующего дате, надо использовать какой-угодно формат, помимо даты. В свою очередь, для того, чтобы число превратить в дату, следует выставить соответствующий формат.
Как представляется время в Excel
То, как представляется время в Excel, немного отличается от даты. За основу берется день, а часы, минуты, секунды – это его дробные части. То есть, 24 часа – это 1, а любое более мелкое значение рассматривается, как ее доля. Так, 1 час – это 1/24 дня, 1 минута – 1/1140, а 1 секунда – 1/86400. Наименьшая доступная в Excel единица времени – 1 миллисекунда.
Аналогично датам, этот способ представления дает возможность осуществлять расчеты с временем. Правда, здесь одна вещь неудобна. После расчетов у нас получается часть суток, а не количество дней.
На скриншоте указаны значения в числовом формате и формате «Время».
Методика расчета времени аналогична дате. Нужно от более позднего времени отнять более раннее. В нашем случае это формула =B3-B2.
Так как у ячейки B4 сперва был Общий формат, то по окончанию введения формулы он сразу меняется на «Время».
Excel в работе с временем выполняет обычные арифметические операции с числами, которые потом переводятся в знакомый нам временной формат.
Формат дат и времени
Насколько мы знаем, даты и время могут храниться в разных форматах. Поэтому нужно знать, как правильно вводить их, чтобы форматирование было правильным.
Конечно, можно использовать порядковый номер дня или часть суток при вводе даты и времени, но такой подход очень неудобный. Кроме этого, придется постоянно применять к ячейке определенный формат, что только усиливает дискомфорт.
Поэтому Excel дает возможность указывать время и дату разными способами. Если применить один из них, то программа сразу информацию конвертирует в соответствующее число и применяет к ячейке правильный формат.
В таблице ниже вы можете ознакомиться с перечнем способов ввода даты и времени, поддерживаемых Excel. В левой колонке перечислены возможные форматы, а в правой – как они будут отображаться в Excel после преобразования. Важно отметить, что если не указывается год, автоматически присваивается текущий, который выставлен в операционной системе.
На самом деле, способов отображения значительно больше. Но и этих достаточно. Также конкретный вариант записи даты может отличаться в зависимости от страны или региона, а также настроек операционной системы.
Произвольное форматирование
Во время работы с ячейками пользователь может сам определять, какой будет формат. Он может сделать так, чтобы отображалось только время, месяц день и так далее. Также есть возможность регулировать порядок формулирования даты, а также разделители.
Чтобы получить доступ к окну редактирования, необходимо открыть вкладку «Число», где найти опцию окно «Формат ячеек». В открывшемся диалоговом окне будет категория «Дата», в котором можно выбрать правильный формат дат.
Если же выбрать категорию «Время», то, соответственно, появится перечень с вариантами отображения времени.
Для применения определенного варианта форматирования к ячейке, необходимо выбрать нужный формат и кликнуть «ОК». После этого результат применится. Если не хватает форматов, которые предлагает Excel, то можно найти категорию «Все форматы». Там тоже есть множество вариантов.
Если никакой вариант не подходит, то всегда возможно создание своего собственного. Сделать это очень легко. Необходимо просто выбрать предустановленные форматы, как образец и выполнить такие действия:
- Выбрать ту ячейку, формат которой нужно изменить.
- Открыть диалоговое окно «Формат ячеек» и найти вкладку «Число».
- Далее открывается категория «Все форматы», где находим поле ввода «ТИП». Там надо указать код числового формата. После того, как его введете, нажмите «ОК».
- После этих действий ячейка будет отображать информацию о дате и времени в пользовательском формате.
Использование функций при работе с датами и временем
При работе с датами и временем пользователь может использовать более 20 самых разнообразных функций. И хотя кому-то этого количества может быть слишком много, все они могут использоваться для достижения определенных целей.
Чтобы получить доступ ко всем возможным функциям, необходимо перейти в категорию «Дата и время» группы «Библиотека функций». Мы же рассмотрим только некоторые основные функции, дающие возможность извлекать разные параметры из дат и времени.
ГОД()
Дает возможность получить год, который соответствует определенной дате. Как вы уже знаете, это значение может быть в пределах от 1900 до 9999.
В ячейке 1 видно дату, представленную в формате ДДДД ДД.ММ.ГГГГ чч:мм:cc. Это тот формат, который мы создали ранее. Давайте приведем в качестве примера формулу, которая определяет, сколько лет прошло между двумя датами.
При этом если более внимательно посмотреть, то окажется, что функция не вычислила полностью правильного результата. Причина кроется в том, что она использует только даты в своих вычислениях.
МЕСЯЦ()
С помощью этой функции можно выделить номер месяца, соответствующий определенной дате. Возвращает результат, колеблющийся в пределах от 1 до 12. Это число в свою очередь соответствует номеру месяца.
ДЕНЬ()
Аналогично предыдущим функциям, эта выдает номер дня, в определенной дате. Результат вычислений может колебаться от 1 до 31.
ЧАС()
Как можно догадаться из названия, эта функция возвращает номер часа, который колеблется от 0 до 23.
МИНУТЫ()
Функция, возвращающая количество минут в определенной ячейке. Возможные значения, которые возвращаются – от 0 до 59.
СЕКУНДЫ()
Эта функция возвращает такие же значения, как и предыдущая, за тем лишь исключением, что ею возвращаются секунды.
ДЕНЬНЕД()
С помощью этой функции можно узнать номер дня недели, который используется в этой дате. Возможные значения от 1 до 7, но стоит учитывать, что отсчет начинается с воскресенья, а не понедельника, как у нас принято.
При этом с помощью второго аргумента эта функция позволяет настроить формат. Например, если передать значение 2 в качестве второго параметра, то можно настроить формат, при котором число 1 означает понедельник, а не воскресенье. Это значительно удобнее для отечественного пользователя.
Если во втором аргументе написать 2, то в нашем случае функция вернет значение 6, что соответствует субботе.
СЕГОДНЯ()
Эта функция очень проста: чтобы она работала, не требуется вводить никаких аргументов. Ею возвращается порядковый номер даты, которая выставлена на компьютере. Если ее применить к ячейке, для которой выставлен формат Общий, то автоматически он будет сконвертирован в формат «Дата».
ТДАТА()
Эта функция также не требует ввода аргументов. Действует таким же образом, как и предыдущая, только с датой и временем. Используется, если надо вставить в ячейку текущую дату и время, которые выставлены в компьютере. И точно так же, как и в предыдущей функции, при применении этой, ячейка автоматически конвертируется в формат даты и времени при условии, что до этого был выставлен формат «Общий».
Как предыдущая, так и эта функция при каждом пересчете листа автоматически изменяются, что дает возможность отображать самое актуальное время и дату.
Например, такая формула может определить нынешнее время.
=ТДАТА()-СЕГОДНЯ()
В этом случае формула определит долю суток в десятичном формате. Правда, придется к ячейке, в которую записывается формула, применить формат времени, если нужно отобразить именно время, а не число.
ДАТА()
Эта функция имеет три аргумента, каждый из которых необходимо обязательно ввести. После расчетов этой функцией возвращается порядковый номер даты. Ячейка автоматически конвертируется в формат «Дата», если до этого у нее был «Общий» формат.
Аргумент «День» или «Месяц» можно делать как положительным, так и отрицательным. В первом случае дата увеличивается, а во втором – уменьшается.
Также можно использовать математические операции в аргументах функции ДАТА. Например, эта формула позволяет добавить 1 год 5 месяцев и 17 дней к дате, указанной в ячейке A1.
А такая формула дает возможность превратить текстовую строку в полноценную рабочую дату, которая может использоваться и в других функциях.
ВРЕМЯ()
Точно так же, как и функция ДАТА(), в этой функции есть три обязательных параметра – часы, минуты и секунды. После того, как ее использовать, в результирующей ячейке появится десятичное число, но сама ячейка будет отформатирована в формат «Время», если до этого у нее был формат «Общий».
По своему принципу работы у функции ВРЕМЯ() и ДАТА() очень много чего схожего. Поэтому особого внимания на ней акцентировать нет смысла.
Важно учесть, что эта функция не способна вернуть время, которое больше 23:59:59. Если получится больший, чем этот, результат, функция автоматически обнуляется.
Функции ДАТА() и ВРЕМЯ() могут применяться вместе.
На этом скриншоте ячейка D1, в которой использовались обе эти функции, имеет формат даты и времени.
Функции вычисления даты и времени
Всего есть 4 функции, позволяющие выполнять математические операции с датой и временем.
ДАТАМЕС()
С помощью этой функции можно узнать порядковый номер даты, отстающей на известное количество месяцев (или опережающей заданную). Эта функция принимает два аргумента: начальная дата и количество месяцев. Второй аргумент может быть как положительным, так и отрицательным. Первый вариант нужно указывать, если требуется вычислить будущую дату, а второй – если предыдущую.
КОНМЕСЯЦА()
Эта функция дает возможность определить порядковый номер последнего дня месяца, отстающего или опережающего заданную дату. Имеет такие же аргументы, как и предыдущая.
РАБДЕНЬ()
То же самое, что и функция ДАТАМЕС(), только отставание или опережение происходит на определенное количество рабочих дней. Синтаксис аналогичный.
Все эти три функции возвращают число. Чтобы увидеть дату, нужно сконвертировать ячейку в соответствующий формат.
ЧИСТРАБДНИ()
Это простая функция определяет количество рабочих дней между датой 1 и датой 2.
Оцените качество статьи. Нам важно ваше мнение:
Python Time Функции, использование и приложения с примерами
Python Time & Datetime — это основные модули Python для программирования даты и времени. В этом руководстве мы исследуем модуль времени Python, увидим примеры и напишем код для выполнения операций времени в Python.
В Python и время, и дата-время являются объектами, а не простой строкой или меткой времени. Итак, чтобы обработать их в программе, вам необходимо импортировать соответствующий модуль или класс из модуля.
Кроме того, при программировании с использованием классов времени и даты и времени вам может потребоваться установить соответствующий часовой пояс.Следовательно, в этом руководстве мы также рассмотрим функции, связанные с часовыми поясами.
Давайте начнем это руководство с изучения основных функций Python time , структур и их использования.
Начало работы с модулем времени Python
Каждая компьютерная система поставляется с часами, запрограммированными на определенную дату, время и часовой пояс. Модуль времени Python предоставляет возможность читать, представлять и сбрасывать информацию о времени разными способами. И мы рассмотрели все эти основные способы и продемонстрировали на примерах.Ниже мы составили краткое изложение этой статьи, чтобы вы не пропустили ни одной части.
Основные сведения о модуле «Время».
- Модуль времени является оболочкой для библиотеки времени выполнения C, чтобы предоставить функции для управления временем. Он имеет набор функций, которые вы можете вызывать для работы с системным временем.
- Этот модуль следует соглашению EPOCH, которое относится к моменту начала отсчета времени. Он поддерживает дату и время от эпохи до 2038 года.
- Unix EPOCH — полночь в 12:00 1 января 1970 года. Чтобы определить значение EPOCH в вашей системе, используйте следующий код.
>>> время импорта >>> time.gmtime (0) time.struct_time (tm_year = 1970, tm_mon = 1, tm_mday = 1, tm_hour = 0, tm_min = 0, tm_sec = 0, tm_wday = 3, tm_yday = 1, tm_isdst = 0)
Примечание — Функция time.gmtime () возвращает объект struct_time .
- Термин « секунд с начала эпохи » или « No.тиков с эпохи »представляет время (в секундах), прошедшее с эпохи.
Что такое галочка в Python?
Тик — это временной интервал, представляющий собой число с плавающей запятой, измеряемое в секундах.
- Некоторые функции времени возвращают время в формате DST . DST — это летнее время. Это механизм, который переводит часы на 1 час вперед летом и назад осенью.
Полезные функции в модуле времени Python.
Ниже приведены наиболее часто используемые функции и структура данных модуля времени в Python, которую вы должны знать.
Наверх
1. Функция time.time ()
# Синтаксис time.time ()
time () — это основная функция модуля времени. Он измеряет количество секунд с начала эпохи как значение с плавающей запятой. Давайте посмотрим:
время импорта print ('Текущее время:', time.time ()) #Output - Текущее время: 1504634843.1003768
Функция time () , как показано в приведенном выше примере, возвращает время в десятичном формате. Это может быть полезно для хранения или сравнения дат, но не подходит для отображения в отчетах.
Другое распространенное применение функции времени Python — измерение прошедшего времени настенных часов между двумя точками.
Примечание — Время на настенных часах — это фактическое время, затраченное на выполнение задания. Это то же самое, что отсчитывать время своей работы по секундомеру.
Пример — time () для измерения прошедшего времени (время настенных часов)
время импорта начало = время.время() print ("Я делаю работу.") time.sleep (0,1) конец = время.время () печать (конец - начало)
Наверх
2. Функция time.clock ()
# Синтаксис time.clock ()
В отличие от функции time.time () , которая вычисляет время настенных часов, time.clock () возвращает время часов процессора.
Мы можем использовать time.clock () для тестирования / тестирования производительности и time.time () для планирования чего-либо.
Вывод функции clock () отражает правильное время, затраченное программой. И он точнее своего аналога.
Однако его точное поведение может отличаться в зависимости от используемой вами ОС. Он может вернуть время процесса, игнорируя время ожидания. А в некоторых случаях он мог подсчитывать время, прошедшее, даже когда процесс был неактивен.
Примечание — Тактовая частота процессора не тикает, если программа находится в состоянии сна.
Давайте посмотрим на примере, чтобы продемонстрировать, что происходит, когда мы используем обе функции времени.
Пример —
время импорта template = 'time () # {: 0.2f}, clock () # {: 0.2f}' печать (template.format (time.time (), time.clock ())) для i в диапазоне (3, 0, -1): print ('> Сон для', i, 'sec.') time.sleep (я) печать (template.format (time.time (), time.clock ()) )
Выход —
Python 2.7.10 (по умолчанию, 14 июля 2015 г., 19:46:27) [GCC 4.8.2] в Linux время () # 1504977071.40, часы () # 0.10 ('> Сон для', 3, 'сек.') время () # 1504977074.40, часы () # 0.10 ('> Сон для', 2, 'сек.') время () # 1504977076.40, часы () # 0.10 ('> Сон для', 1, 'сек.') время () # 1504977077.40, часы () # 0.10
Обратите внимание, что Python 3.3 устарел clock ()
.
python — функции / методы времени с параметрами через timeit: простой и короткий обходной путь
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
utime — функции, связанные со временем — документация MicroPython 1.13
Измерение разницы в тиках между значениями, возвращаемыми из ticks_ms ()
, ticks_us ()
,
или функции ticks_cpu ()
, как значение со знаком, которое может быть циклическим.
Порядок аргументов такой же, как для вычитания.
оператор, ticks_diff (ticks1, ticks2)
имеет то же значение, что и ticks1 - ticks2
.
Однако значения, возвращаемые функциями ticks_ms (),
и т. Д., Могут оборачиваться, поэтому
прямое вычитание из них даст неверный результат.Поэтому
ticks_diff ()
нужен, он реализует модульный (а точнее кольцевой)
арифметика для получения правильного результата даже для значений циклического переноса (если они не
слишком далеко между ними, см. ниже). Функция возвращает значение со знаком в диапазоне
[ -TICKS_PERIOD / 2 .. TICKS_PERIOD / 2-1 ] (это типичное определение диапазона для
двоичные числа со знаком в дополнительном коде). Если результат отрицательный, значит,
тик1 произошел раньше, чем тик2 .В противном случае это означает, что
тик1 произошел после тика2 . Это содержит только , если тик1 и тик2
находятся на расстоянии не более TICKS_PERIOD / 2-1 тиков. Если это так
не удерживать, будет возвращен неверный результат. В частности, если два значения галочки
кроме TICKS_PERIOD / 2-1 тиков, это значение будет возвращено функцией.
Однако, если между ними прошло TICKS_PERIOD / 2 тиков реального времени,
функция вернет вместо этого -TICKS_PERIOD / 2 , т.е.е. значение результата будет перенесено
в отрицательный диапазон возможных значений.
Неофициальное объяснение приведенных выше ограничений: предположим, вы заперты в комнате без
средства отслеживания времени, кроме стандартных часов с 12 метками. Тогда, если вы посмотрите на
наберите номер сейчас и не смотрите снова в течение следующих 13 часов (например, если вы
долгого сна), то когда вы наконец посмотрите еще раз, вам может показаться, что всего 1 час
прошло. Чтобы избежать этой ошибки, просто регулярно смотрите на часы. Ваше приложение
должен делать то же самое.Метафора «слишком долгого сна» также напрямую отображается в приложении.
поведение: не позволяйте вашему приложению выполнять одну задачу слишком долго. Запускать задачи
поэтапно, и делайте так, чтобы между ними сохранялось время.
ticks_diff ()
разработан с учетом различных шаблонов использования, среди которых:
Опрос с тайм-аутом. В этом случае порядок событий известен, и вы будете заниматься
только при положительных результатахticks_diff ()
:# Дождитесь подтверждения вывода GPIO, но не более 500us начало = время.ticks_us () а pin.value () == 0: если time.ticks_diff (time.ticks_us (), start)> 500: поднять TimeoutError
Планирование событий. В этом случае результат
ticks_diff ()
может быть отрицательным.
если событие просрочено:# Этот фрагмент кода не оптимизирован сейчас = time.ticks_ms () schedule_time = task.scheduled_time () если ticks_diff (schedule_time, now)> 0: print ("Слишком рано, давай вздремнуть") sleep_ms (ticks_diff (время_планирования, сейчас)) задача.пробег() elif ticks_diff (время_планирования, сейчас) == 0: print («Как раз вовремя!») task.run () elif ticks_diff (время_планирования, сейчас) <0: print («Ой, опаздывай, скажи задаче быстрее!») task.run (run_faster = true)
Примечание. Не передавайте time ()
значений в ticks_diff ()
, вы должны использовать
нормальные математические операции над ними. Но обратите внимание, что time ()
может (и будет)
также переполнение. Это известно как https://en.wikipedia.org/wiki/Year_2038_problem.
.
Формат времени Excel и использование функций СЕЙЧАС и ВРЕМЯ
В этом руководстве вы узнаете об особенностях формата времени в Excel, а также о том, как добавить метку времени с помощью ярлыков или вставить автоматически обновляемое время с помощью функции СЕЙЧАС. Вы также узнаете, как применять специальные функции времени Excel для получения часов, минут или секунд из отметки времени.
Microsoft Excel имеет ряд полезных функций времени, и их более глубокое знание может сэкономить вам много времени.Используя специальные функции, вы можете вставить текущую дату и время в любое место на листе, преобразовать время в десятичное число, суммировать различные единицы времени или вычислить прошедшее время.
Чтобы использовать мощные функции времени в Excel, полезно знать, как Microsoft Excel хранит время. Итак, прежде чем углубляться в формулы, давайте потратим пару минут на изучение основ формата времени Excel.
Формат времени Excel
Если вы следовали нашему руководству по датам в Excel, то знаете, что Microsoft Excel хранит даты в виде последовательных чисел, начиная с 1 января 1900 года, которое хранится под номером 1.Поскольку Excel рассматривает время как часть дня, время сохраняется в виде десятичных дробей.
Во внутренней системе Excel:
- 00:00:00 сохраняется как 0,0
- 23:59:59 сохраняется как 0,99999
- 06:00 - 0,25
- 12:00 - 0,5
Когда в ячейку вводятся и дата, и время, они сохраняются как десятичное число, состоящее из целого числа, представляющего дату, и десятичной части, представляющей время. Например, 1 июня 2015 г. 9:30:00 сохраняется как 42156.3958333333.
Как получить десятичное представление времени в Excel
Быстрый способ выбрать десятичное число, представляющее определенное время, - использовать диалоговое окно Формат ячеек .
Просто выберите ячейку, содержащую время, и нажмите Ctrl + 1, чтобы открыть диалоговое окно Формат ячеек . На вкладке Number выберите General в Category , и вы увидите десятичное число в поле Sample .
Теперь вы можете записать это число и щелкнуть Отмена , чтобы закрыть окно.Или вы можете нажать кнопку OK и заменить время на соответствующее десятичное число в ячейке. Фактически, вы можете думать об этом как о самом быстром, простом и свободном от формул способе преобразования времени в десятичное в Excel. В следующей части нашего руководства по Excel Time мы более подробно рассмотрим специальные функции времени и вычисления для преобразования времени в часы, минуты или секунды.
Как применить или изменить формат времени в Excel
Microsoft Excel достаточно умен, чтобы распознавать время при вводе и соответствующем форматировании ячейки.Например, если вы введете в ячейке 20:30 или 8:30 PM или даже 8:30 p , Excel интерпретирует это как время и отобразит либо 20:30 , либо 8:30 PM , в зависимости от формата времени по умолчанию.
Если вы хотите отформатировать некоторые числа как времена или применить другой формат времени к существующим значениям времени, вы можете сделать это с помощью диалогового окна Форматировать ячейки , как показано ниже.
- На листе Excel выберите ячейки, в которых вы хотите применить или изменить формат времени.
- Откройте диалоговое окно Format Cells , нажав Ctrl + 1 или щелкнув значок Dialog Box Launcher рядом с Number в группе Number на вкладке Home .
- На вкладке Число выберите Время из списка Категория и выберите нужный формат времени из списка Тип .
- Щелкните OK, чтобы применить выбранный формат времени и закрыть диалоговое окно.
Создание пользовательского формата времени Excel
Хотя Microsoft Excel предоставляет несколько различных форматов времени, вы можете создать свой собственный, который лучше всего подходит для конкретного листа. Для этого откройте диалоговое окно Формат ячеек , выберите Пользовательский из списка Категория и введите формат времени, который вы хотите применить, в поле Тип .
Созданный вами пользовательский формат времени будет в списке Тип в следующий раз, когда он вам понадобится.
Наконечник. Самый простой способ создать собственный формат времени в Excel - использовать один из существующих форматов в качестве отправной точки. Для этого щелкните Время в списке Категория и выберите один из предопределенных форматов в Тип . После этого переключитесь на Custom и внесите изменения в формат, отображаемый в поле Type .
При создании пользовательского формата времени в Excel вы можете использовать следующие коды.
Код | Описание | Отображается как |
ч | Часы без нуля в начале | 0-23 |
hh | Часы с ведущим нулем | 00-23 |
м | Минуты без нуля в начале | 0-59 |
мм | Минуты с нулем в начале | 00-59 |
с | Секунды без нуля в начале | 0-59 |
н.с. | Секунды с нулем в начале | 00-59 |
AM / PM | Периоды дня (если не указано, используется 24-часовой формат времени) | AM или PM |
Наконечник. Чтобы создать пользовательское форматирование для дат и времени , используйте различные комбинации временных кодов и кодов даты.
В следующей таблице представлено несколько примеров того, как могут выглядеть ваши форматы времени в Excel:
Формат | Отображается как |
ч: мм: сс AM / PM | 13:30:00 |
h: мм | 13:30 |
дддд, м / д / гг ч: мм AM / PM | Вторник, 13.01.15, 13:30 |
ддд, мммм дд, гггг чч: мм: сс | вт, 13 января 2015 г. 13:30:00 |
Пользовательские форматы для временных интервалов более 24 часов
Когда вы вычисляете время в Excel, ячейка, содержащая сумму времени, может превышать 24 часа.Чтобы Microsoft Excel правильно отображал время, превышающее 24 часа, примените один из следующих настраиваемых форматов времени.
Формат | Отображается как | Пояснение |
[h]: мм | 41:30 | 41 час 30 минут |
[h]: мм: ss | 41:30:10 | 41 час 30 минут 10 секунд |
[h] «часы», мм «минуты», сс «секунды» | 40 часов, 30 минут, 10 секунд | |
d h: мм: ss | 1 17:30:10 | 1 день 17 часов 30 минут 10 секунд |
d "день" ч: мм: сс | 1 день 17:30:10 | |
d "день", "h" часы, "m" минуты и "s" секунды | 1 день 17 часов 30 минут 10 секунд |
Пользовательские форматы для отрицательных значений времени
Пользовательские форматы времени, описанные выше, работают только для положительных значений.Если результат ваших вычислений представляет собой отрицательное число, отформатированное как время (например, когда вы вычитаете большее количество времени из меньшего), результат будет отображаться как #####. Если вы хотите отформатировать отрицательные значения времени по-другому, вам доступны следующие параметры:
- Показать пустую ячейку для отрицательных значений времени. Введите точку с запятой в конце формата времени, например [ч]: мм;
- Отображение сообщения об ошибке . Введите точку с запятой в конце формата времени, а затем введите сообщение в кавычках, например.г. [ч]: мм; «Время отрицания»
Вообще говоря, точка с запятой действует как разделитель, отделяя формат положительных значений от форматирования отрицательных значений.
Если вы хотите отображать отрицательное время как отрицательные значения , например -10: 30, самый простой способ - изменить систему дат Excel на систему дат 1904 года. Для этого нажмите Файл> Параметры> Дополнительно , прокрутите вниз до При вычислении раздела книги и установите флажок Использовать систему дат 1904 .
Формат времени по умолчанию в Excel
При изменении формата времени в диалоговом окне Формат ячеек вы могли заметить, что один из форматов начинается со звездочки (*). Это формат времени по умолчанию в вашем Excel.
Чтобы быстро применить формат времени Excel по умолчанию к выбранной ячейке или диапазону ячеек, щелкните стрелку раскрывающегося списка в группе Число на вкладке Home и выберите Time .
Чтобы изменить формат времени по умолчанию, перейдите в панель управления и щелкните Регион и язык . Если на панели управления открывается вид Категория , щелкните Часы, язык и регион > Регион и язык > Измените дату, время или числовой формат .
Примечание. При создании нового формата времени в Excel или изменении существующего помните, что независимо от того, как вы выбрали отображение времени в ячейке, Excel всегда внутренне сохраняет время одинаково - как десятичные числа.
Как вставить время и метку времени в Excel
Существует несколько способов вставить время в Excel, какой из них использовать, зависит от того, хотите ли вы использовать статическую метку времени или динамическое значение, которое автоматически обновляется для отражения текущего времени.
Добавить отметку времени с помощью ярлыков
Если вы ищете способ вставить метку времени в ячейку Excel, то есть статическое значение, которое не будет автоматически обновляться при пересчете книги, используйте один из следующих ярлыков:
- Чтобы вставить текущего времени , нажмите Ctrl + Shift +;
- Чтобы ввести текущую дату и время , нажмите Ctrl +; который вставляет дату, затем нажмите клавишу пробела, а затем нажмите Ctrl + Shift +; чтобы вставить текущее время.
Добавьте сегодняшнюю дату и текущее время, используя функцию СЕЙЧАС
Если вы хотите вставить текущую дату и время как динамическое значение, которое обновляется автоматически, используйте функцию Excel NOW.
Формула настолько проста, насколько это возможно, аргументы не требуются:
= СЕЙЧАС ()
При использовании функции СЕЙЧАС в Excel следует помнить о нескольких моментах:
- Функция СЕЙЧАС извлекает время из системных часов вашего компьютера.
- NOW - это одна из изменчивых функций Excel, которая заставляет ячейку с формулой пересчитывать каждый раз, когда рабочий лист повторно открывается или пересчитывается.
- Чтобы заставить функцию Excel NOW обновить возвращаемое значение, нажмите Shift + F9, чтобы пересчитать активный лист, или F9, чтобы пересчитать все открытые книги.
- Чтобы функция СЕЙЧАС автоматически обновлялась через указанный интервал времени, добавьте макрос VBA в свою книгу; несколько примеров доступны здесь.
Вставить текущее время как динамическое значение
Если вы предпочитаете вставить в ячейку только текущее время без даты, у вас есть следующие варианты:
- Используйте формулу
= СЕЙЧАС ()
, а затем примените формат времени к ячейке (ям).Помните, что это изменит только формат отображения, фактическое значение, хранящееся в ячейке, по-прежнему будет десятичным числом, состоящим из целого числа, представляющего дату, и дробной части, представляющей время.
- Используйте следующую формулу:
= СЕЙЧАС () - ИНТ (СЕЙЧАС ())
Функция INT используется для округления десятичного числа, возвращаемого функцией NOW (), до ближайшего целого числа. Затем вы вычитаете целую часть, представляющую сегодняшнюю дату, чтобы вывести только дробную часть, представляющую текущее время.
Поскольку формула возвращает десятичное число, вам нужно будет применить формат времени к ячейке, чтобы значение отображалось как время.
На следующем снимке экрана показаны обе формулы в действии. Обратите внимание, что хотя форматированные значения времени выглядят одинаково (столбец C), фактические значения, хранящиеся в ячейках (столбец D), различны - D4 содержит только дробную часть:
Вставьте время с помощью функции ВРЕМЯ Excel
Функция ВРЕМЯ в Excel используется для преобразования текстовой строки, показывающей время, в десятичное число, представляющее время.
Синтаксис функции ВРЕМЯ Excel очень прост:
= ВРЕМЯ (час, минута, секунда)
Аргументы часа, минуты и секунды могут быть представлены в виде чисел от 0 до 32767.
- Если час больше 23, оно делится на 24, а остаток принимается как значение часа.
Например, TIME (30, 0, 0) равно TIME (6,0,0), что составляет 0,25 или 6:00 AM.
- Если минуты больше 59, оно преобразуется в часы и минуты.И если секунды больше 59, оно преобразуется в часы, минуты и секунды.
Например, ВРЕМЯ (0, 930, 0) преобразуется в ВРЕМЯ (15, 30, 0), что составляет 0,645833333 или 15:30.
Функция ВРЕМЯ Excel полезна, когда дело доходит до объединения отдельных значений в одно значение времени, например значений в других ячейках или возвращаемых другими функциями Excel.
Как получить часы, минуты и секунды из отметки времени
Чтобы извлечь единицы времени из отметки времени, вы можете использовать следующие функции времени Excel:
ЧАС (серийный_номер) - возвращает час значения времени в виде целого числа от 0 (12:00 утра) до 23 (23:00 вечера).
MINUTE (serial_number) - получает минуты значения времени в виде целых чисел от 0 до 59.
СЕКУНДА (серийный_номер ) - возвращает секунды значения времени в виде целых чисел от 0 до 59.
Во всех трех функциях вы можете вводить время в виде текстовых строк, заключенных в двойные кавычки (например, «6:00 AM»), в виде десятичных чисел (например, 0,25, что соответствует 6:00 AM) или как результаты других функций. Ниже приведены несколько примеров формул.
-
= ЧАС (A2)
- возвращает часы метки времени в ячейке A1. -
= МИНУТА (A2)
- возвращает минуты отметки времени в ячейке A1. -
= СЕКУНДА (A2)
- возвращает секунды метки времени в ячейке A1. -
= ЧАС (СЕЙЧАС ())
- возвращает текущий час.
Теперь, когда вы приступили к работе с форматом времени и функциями времени в Excel, вам будет намного проще управлять датой и временем в ваших таблицах. В следующей части нашего руководства по Excel Time мы обсудим различные способы преобразования времени в числа.Благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
.