Функции работы со временем

<< Click to Display Table of Contents >>

Navigation:  Modbus Universal MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека TIME >

Функции работы со временем

Функции работы со временем

mbul_mail time.StringToTimeStamp

mbul_mail time.TimeStampToString

mbul_mail time.TimeToTimeStamp

mbul_mail time.TimeStampToTime

mbul_mail time.TimeNow

mbul_mail time.TimeStampNow

mbul_mail time.PackTime

mbul_mail time.UnpackTime

mbul_mail time.TimeToString

mbul_mail time.TimeAddSec

mbul_mail time.TimeAddMin

mbul_mail time.TimeAddHour

mbul_mail time.TimeAddDay

mbul_mail time.TimeAddMonth

mbul_mail time.TimeAddYear

mbul_mail time.OffsetLocalTime

time.StringToTimeStamp

Параметр функции: строковое представление локального времени в указанном формате.

Возвращает 8-байтовый массив (байты 0-3 – секунды с 1 января 1970г., байты 4-6 – миллисекунды, байт 7 – 0x0a).

Пример

ts = time.StringToTimeStamp("2010-05-03 12:34:45.100");

time.TimeStampToString

Эта функция является обратной по отношению к time.StringToTimeStamp .

Параметр функции: 8-байтовый массив (байты 0-3 – секунды с 1 января 1970г., байты 4-6 – миллисекунды, байт 7 – 0x0a).

Возвращает строковое представление локального времени в указанном формате.

Пример

ts = time.StringToTimeStamp("2010-05-03 12:34:45.100");

stringts = time.TimeStampToString(ts);

time.TimeToTimeStamp

Параметры функции: время в формате os.time и число миллисекунд. Время в формате os.time может быть сформировано функцией time.PackTime, time.TimeNow, time.StringToTimeStamp.

Возвращает 8-байтовый массив (байты 0-3 – секунды с 1 января 1970г., байты 4-6 – миллисекунды, байт 7 – 0x0a).

Пример

timesec = os.time{year=2010,month=05,day=03,hour=12,min=34,sec=45};

timemsec=200;

ts = time.TimeToTimeStamp(timesec,timemsec);

time.TimeStampToTime

Эта функция является обратной по отношению к time.TimeToTimeStamp .

Параметр функции: 8-байтовый массив (байты 0-3 – секунды с 1 января 1970г., байты 4-6 – миллисекунды, байт 7 – 0x0a).

Возвращает время в формате os.time и число миллисекунд.

Пример

timesec = os.time{year=2010,month=05,day=03,hour=12,min=34,sec=45};

timemsec=200;

ts = time.TimeToTimeStamp(timesec,timemsec);

timesec,timemsec = time.TimeStampToTime(ts);

time.TimeNow

Возвращает текущее системное время.

Пример

timesec= time.TimeNow( );

time.TimeStampNow

Возвращает текущее время в формате временной метки (дата-время + миллисекунды).

time.PackTime

Собирает время из отдельных элементов.

Параметры функции: шесть числовых элементов (год, месяц, день, час, минута, секунда).

Возвращает код ошибки (0, если ошибки нет) и сформированное значение  времени в формате os.time  - количество секунд с 1 января 1970 года по UTC. В случае ошибки возвращает 1 января 1970 года).

Примечание. Обратите внимание что с помощью данной функции формируется время в формате UTC. Если вам нужно получить локальное время (например для отправки его в прибор), то прибавьте нужное количество часов с помощью функции time.TimeAddHour. Получить смещение текущего часового пояса компьютера можно с помощью функции time.OffsetLocalTime. Но если результат данной функции предназначен для формирования метки времени OPC переменной, функцией time.TimeToTimeStamp, то переводить время в локальное не нужно - данная функция требует время в формате UTC.

Коды ошибок:

mbul   0 – нет ошибки;

mbul   2 – ошибка ввода года (от 1970 до 2037);

mbul   3 – ошибка ввода месяца (от 1 до 12);

mbul   4 – ошибка ввода дня (от 1 до 31);

mbul   5 – ошибка ввода часа (от 0 до 23);

mbul   6 – ошибка ввода минуты (от 0 до 59);

mbul   7 – ошибка ввода секунды (от 0 до 59).

Пример 1

err,timesec = time.PackTime(2012,5,3,12,31,45);

--err=0, timesec имеет дату 3 мая 2012 г., 12:31:45

Пример 2

err,timesec = time.PackTime(2011,2,29,12,31,45);

--err=4 (29 февраля в 2011 году нет), timesec имеет дату 01.01.1970

time.UnpackTime

Эта функция является обратной по отношению к time.PackTime , т.е. она разбирает локальное время на отдельные элементы.

Параметр функции: время в формате os.time .

Возвращает 6-байтовый массив: год (1), месяц (2), день (3), час (4), минута (5), секунда (6).

Пример

err,timesec = time.PackTime(2012,5,3,12,31,45);

w={};

w=time.UnpackTime(timesec);

--w[1]=2012, w[2]=5, w[3]=3, w[4]=12, w[5]=31, w[6]=45

time.TimeToString

Функция преобразует время в формате os.time в строку.

Пример

local Now=time.TimeNow();

local str=time.TimeToString(Now );

-- переменная str содержит строковое представление текущего времени

time.TimeAddSec

Функция прибавляет к переменной времени заданное количество секунд.

Параметры функции: первый параметр – время в формате os.time , второй – число прибавляемых секунд (знаковое целое число).

Пример 1

local Now=time.TimeNow();

local dt=time.TimeAddSec(Now,10);

-- значение переменной dt на 10 секунд больше текущего времени

Пример 2

local Now=time.TimeNow();

local dt=time.TimeAddSec(Now,-10);

-- значение переменной dt на 10 секунд меньше текущего времени

time.TimeAddMin

Функция прибавляет к переменной времени заданное количество минут.

Параметры функции: первый параметр – время в формате os.time , второй – число прибавляемых минут (знаковое целое число).

Пример

local Now=time.TimeNow();

local dt=time.TimeAddMin (Now,10);

-- значение переменной dt на 10 минут больше текущего времени

time.TimeAddHour

Функция прибавляет к переменной времени заданное количество часов.

Параметры функции: первый параметр – время в формате os.time , второй – число прибавляемых часов (знаковое целое число).

Пример

local Now=time.TimeNow();

local dt=time.TimeAddHour (Now,5);

-- значение переменной dt на 5 часов больше текущего времени

time.TimeAddDay

Функция прибавляет к переменной времени заданное количество дней.

Параметры функции: первый параметр – время в формате os.time , второй – число прибавляемых дней (знаковое целое число).

Пример

local Now=time.TimeNow();

local dt=time.TimeAddDay (Now,1);

-- значение переменной dt на 1 день больше текущего времени

time.TimeAddMonth

Функция прибавляет к переменной времени заданное количество месяцев.

Параметры функции: первый параметр – время в формате os.time , второй – число прибавляемых месяцев (знаковое целое число).

Функция учитывает количество дней в месяцах. Если в результате прибавления месяца получается несуществующая дата, то возвращается последний день месяца. Например, если к 31 января 2012 года прибавить 1 месяц, то функция вернет 29 февраля 2012 года.

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

Пример 1

local err,Time=time.PackTime(2012,2,29,0,0,0);

local dt=time.TimeAddMonth(Time,1);

-- дата в значении переменной dt – 29 марта 2012 года

Пример 2

local err,Time=time.PackTime(2012,1,31,0,0,0);

local dt=time.TimeAddMonth(Time,1);

--дата в значении переменной dt – 29 февраля 2012 года

time.TimeAddYear

Функция прибавляет к переменной времени заданное количество лет.

Параметры функции: первый параметр – время в формате os.time , второй – число прибавляемых лет (знаковое целое число).

Функция учитывает количество дней в месяцах – алгоритм такой же, как и в функции time.TimeAddMonth .

Пример 1

local err,Time=time.PackTime(2012,1,31,0,0,0);

local dt=time.TimeAddYear (Time,1);

--дата в значении переменной dt – 31 января 2013 года

Пример 2

local err,Time=time.PackTime(2012,2,29,0,0,0);

local dt=time.TimeAddYear (Time,1);

-- дата в значении переменной dt – 28 февраля 2013 года    

time.OffsetLocalTime

Функция предназначена для вывода значения смещения текущего локального времени компьютера. В первую очередь функция предназначена для преобразования времени из UTC в локальное и наоборот - с помощью функции time.TimeAddHour.

Пример

--необходимо сформировать время из элементов, и отправить в прибор в локальном формате

local TimeUTC=time.PackTime(2017,5,1,0,0,0 ); --получаем время в UTC формате

local HourOffset=time.OffsetLocalTime( ); --получаем смещение времени

local TimeLocal=time.TimeAddHour(TimeUTC,HourOffset); --прибавляем смещение - получаем локальное время

--переменная TimeLocal будет содержать дату 2017-5-1 3:00:00