Пример1, Прибавить и отнять 1.5 часа от текущего времени (Отобразить)
CODE:
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
// прибавить 1.5 часа к текущему времени
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds); // получаем текущее время
time_add(#Hour, #Minute, #Second, 5400); // 5400 секунд это 1.5 часа
messagebox(f(Hour)+":"+f(Minute)+":"+f(Second));
// отнять 1.5 часа от текущего времени
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
time_add(#Hour, #Minute, #Second, -5400); // 5400 секунд это 1.5 часа
messagebox(f(Hour)+":"+f(Minute)+":"+f(Second));
// функция принимает указатели на переменные: час, мин, сек и сколько секунд прибавить или отнять
function time_add(int #h, int #m, int #s, int s1)
{
int s2=31536000+h*3600+m*60+s+s1;
h=mod(s2/3600, 24); m=mod((s2-h*3600) / 60, 60); s=mod(s2-(h*3600 + m * 60), 60);
}
function mod(int a, int b){return a-(a/b)*b;} // остаток от деления
function f(int num) // если число однозначное добавляет вначале 0, т. е. 5 станет 05
{
if(size(format(num))<2)return "0"+format(num);
return format(num);
}
// прибавить 1.5 часа к текущему времени
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds); // получаем текущее время
time_add(#Hour, #Minute, #Second, 5400); // 5400 секунд это 1.5 часа
messagebox(f(Hour)+":"+f(Minute)+":"+f(Second));
// отнять 1.5 часа от текущего времени
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
time_add(#Hour, #Minute, #Second, -5400); // 5400 секунд это 1.5 часа
messagebox(f(Hour)+":"+f(Minute)+":"+f(Second));
// функция принимает указатели на переменные: час, мин, сек и сколько секунд прибавить или отнять
function time_add(int #h, int #m, int #s, int s1)
{
int s2=31536000+h*3600+m*60+s+s1;
h=mod(s2/3600, 24); m=mod((s2-h*3600) / 60, 60); s=mod(s2-(h*3600 + m * 60), 60);
}
function mod(int a, int b){return a-(a/b)*b;} // остаток от деления
function f(int num) // если число однозначное добавляет вначале 0, т. е. 5 станет 05
{
if(size(format(num))<2)return "0"+format(num);
return format(num);
}
Пример2, Сложение/вычитание времени используя таймштамп (Отобразить)
CODE:
int TimeNow=UnixTime()+108000; // текущее время + 30 часов
int td[6]; // массив, в котором будут храниться: день, месяц, год, час, мин, сек
date(TimeNow, #td[0]); // передаём в функцию время в секундах и указатель на массив
textbkcolor(255, 65280);
messagebox(f(td[0])+"."+f(td[1])+"."+f(td[2])+formatic(13)+formatic(10)+
f(td[3])+":"+f(td[4])+":"+f(td[5]));
function UnixTime() // таймштамп + часовой пояс
{
int a[12], Y, M, W, D, h, m, s, mi; getlocaltime(Y, M, W, D, h, m, s, mi);
a[0]=0;a[1]=31;a[2]=59;a[3]=90;a[4]=120;a[5]=151;a[6]=181;a[7]=212;a[8]=243;a[9]=273;a[10]=304;a[11]=334;
return s+m*60+h*3600+((Y-1970)*365+((Y-1972)/4)+a[M-1]+D)*86400;
}
// преобразует таймштамп в нормальную дату и время
function date(int timestamp, int #m[0])
{
int a[12], year, month, day, hour, min, sec;
a[0]=31;a[1]=28;a[2]=31;a[3]=30;a[4]=31;a[5]=30;
a[6]=31;a[7]=31;a[8]=30;a[9]=31;a[10]=30;a[11]=31;
year=1970 + timestamp / 31557600;
day=mod(timestamp / 86400 - (year-1972) / 4, 365);
for(int i=0; i<11 && day - a[i] > a[i]; i++)day=day-a[i];
m[0]=day-a[i]; m[1]=i+2; m[2]=year; m[3]=mod(timestamp / 3600, 24);
m[4]=mod(timestamp / 60, 60); m[5]=mod(timestamp, 60);
}
function mod(int a, int b){return a-(a/b)*b;} // остаток от деления
function f(int num) // если число однозначное добавляет вначале 0, т. е. 5 станет 05
{
if(size(format(num))<2)return "0"+format(num);
return format(num);
}
int td[6]; // массив, в котором будут храниться: день, месяц, год, час, мин, сек
date(TimeNow, #td[0]); // передаём в функцию время в секундах и указатель на массив
textbkcolor(255, 65280);
messagebox(f(td[0])+"."+f(td[1])+"."+f(td[2])+formatic(13)+formatic(10)+
f(td[3])+":"+f(td[4])+":"+f(td[5]));
function UnixTime() // таймштамп + часовой пояс
{
int a[12], Y, M, W, D, h, m, s, mi; getlocaltime(Y, M, W, D, h, m, s, mi);
a[0]=0;a[1]=31;a[2]=59;a[3]=90;a[4]=120;a[5]=151;a[6]=181;a[7]=212;a[8]=243;a[9]=273;a[10]=304;a[11]=334;
return s+m*60+h*3600+((Y-1970)*365+((Y-1972)/4)+a[M-1]+D)*86400;
}
// преобразует таймштамп в нормальную дату и время
function date(int timestamp, int #m[0])
{
int a[12], year, month, day, hour, min, sec;
a[0]=31;a[1]=28;a[2]=31;a[3]=30;a[4]=31;a[5]=30;
a[6]=31;a[7]=31;a[8]=30;a[9]=31;a[10]=30;a[11]=31;
year=1970 + timestamp / 31557600;
day=mod(timestamp / 86400 - (year-1972) / 4, 365);
for(int i=0; i<11 && day - a[i] > a[i]; i++)day=day-a[i];
m[0]=day-a[i]; m[1]=i+2; m[2]=year; m[3]=mod(timestamp / 3600, 24);
m[4]=mod(timestamp / 60, 60); m[5]=mod(timestamp, 60);
}
function mod(int a, int b){return a-(a/b)*b;} // остаток от деления
function f(int num) // если число однозначное добавляет вначале 0, т. е. 5 станет 05
{
if(size(format(num))<2)return "0"+format(num);
return format(num);
}