Kibor |
Отправлено: 17 Октября, 2013 - 10:32:13
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Функция getlocaltime позволяет получит локальные дату и время на компьютере.
Синтаксис:
CODE:int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
messagebox(Minute);
Выведет минуты.
Пример часов в углу
CODE:int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
textbkcolor(255, 65535);
a: getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
textout(0, 10, 10, "Время: "+format(Hour)+" часов, "+format(Minute)+" минут, "+format(Second)+" секунд", 1);
sleep(100);
goto a;
или более оптимальный
CODE:int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
string time="", t_time="";
textbkcolor(255, 65535);
a: getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
time="Время: "+format(Hour)+" часов, "+format(Minute)+" минут, "+format(Second)+" секунд";
if (time!=t_time)
{
textout(0, 10, 10, time, 1);
t_time=time;
}
sleep(100);
goto a; |
|
|
kunni |
Отправлено: 16 Декабря, 2014 - 17:45:48
|
Наблюдатель
Покинул форум
Сообщений всего: 37
Дата рег-ции: Дек. 2014
Репутация: 2
|
Здравствуйте, уважаемый разработчик!
Уже второй день бьюсь над вопросом, как из даты вычесть дату, т.е. отсчитать, сколько прошло времени от заданной даты до настоящего времени.
Все хорошо, когда происходит в одном месяце. Косяки начинаются, когда даты в разных месяцах-годах.
Заранее спасибо.
(Добавление)
P.S. Только что нашел решение, но оно очень-очень громоздкое. Если у вас имеется решение более лаконичное, прошу, поделитесь, если нет - я предложу свой вариант. |
|
|
Zireael |
Отправлено: 08 Июля, 2018 - 02:43:34
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Может пригодится кому-то. Функция возвращает системное время.
code (Отобразить)CODE:external(VOID, "GetSystemTime", "GetSystemTime", "Kernel32.dll");
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
loop()
{
getsystemtime(#Year, #Month, #DayOfWeek, #Day, #Hour, #Minute, #Second, #Milliseconds);
textbkcolor(255, 65280);
textout(0, 500, 500, format(Day)+" "+format(Month)+" "+format(Year), 2); // день, месяц, год
textout(1, 500, 520, format(Hour)+" "+format(Minute)+" "+format(Second), 2); // час, мин, сек
sleep(300);
}
function getsystemtime(int #Y, int #M, int #DoW, int #D, int #H, int #Min, int #S, int #MS)
{
char t[16]; GetSystemTime(address(#t[0]));
Y=codhexi(#t[0], 2); M=codhexi(#t[2], 2); DoW=codhexi(#t[4], 2); D=codhexi(#t[6], 2);
H=codhexi(#t[8], 2); Min=codhexi(#t[10], 2); S=codhexi(#t[12], 2); MS=codhexi(#t[14], 2);
} |
|
|
AdryV |
Отправлено: 08 Июля, 2018 - 21:57:59
|
Специалист
Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016
Репутация: 11
|
Zireael пишет: Функция возвращает системное время.
спасиб, теперь можно проверять локальное время относительно часовых поясов
буду благодарен если подскажите как убрать вот этот нюанс
допустим сейчас 23:40 системное время, а часовой пояс +4
в итоге если в функции сделать такую правку то получу
H=codhexi(#t[8], 2);
H=H+4;
на выходе получится 27 часов...
а мне в общем нужно что бы после 24 часов часы стали 0 и прибалялось...
я в общем хз как обьяснить не помню чи выкладывал на форуме но вот пример отсчета с вычитами минут секунд и часов....
код (Отобразить)
CODE: if(gettime()-save_time_vremia>=1000)
{
if(idet_boi==1)
{
if(raz==0)
{
start_time=gettime();
raz=1;
}
real_time=gettime();
if(zapomnit==1)
{
start_time=start_time+(real_time-save_start_time);
}
zapomnit=0;
real_time=(gettime()-start_time)/1000;
Hour=real_time/3600;
Minute=(real_time/60)-(Hour*60);
Second=real_time-(Hour*3600)-(Minute*60);
time_raboti_bota="Âðåìÿ: "+format(Hour)+":"+format(Minute)+":"+format(Second);
if(time_raboti_bota!=t_time_raboti_bota)
{
text_static0[8]=time_raboti_bota;
t_time_raboti_bota=time_raboti_bota;
}
}
else
{
if(zapomnit==0)
{
save_start_time=gettime();
zapomnit=1;
}
}
save_time_vremia=gettime();
}
сам код я перебрал с с++ |
|
|
Zireael |
Отправлено: 08 Июля, 2018 - 22:03:56
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: на выходе получится 27 часов...
CODE:int hour=27;
messagebox(mod(hour, 24));
function mod(int a, int b){return a-(a/b)*b;} // остаток от деления |
|
|
|