Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5
  1. #1
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±

    Функция gettime();

    Как работает функция gettime?
    gettime() - возвращает текущее UNIX-время, тут никаких вопросов, все верно, время по Гринвичу.
    gettime(hour, minute, second) возвращает уже МСК время, получается второй вариант берет данные с локализации на которой запущен сервер?

    1. main() {
    2.  
    3. new hour, minute, second;
    4. gettime(hour, minute, second);
    5. printf("Time: %02i:%02i:%02i", hour, minute, second); // Result: Time: 06:36:06 (UNIX: 1603262166)
    6.  
    7. printf("Unix-Time: %i", gettime()); // Result: Unix-Time: 1603251366 (Wed, 21 Oct 2020 03:36:06 GMT)
    8. }




    Примечание: Мое время: UTC+3 (Moscow);
    Последний раз редактировалось punkochel; 21.10.2020 в 09:40.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    gettime в обоих случаях возвращает системное время с машины, на которой запущен сервер.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для punkochel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2018
    Адрес
    Россия
    Сообщений
    146
    Репутация:
    25 ±
    В таком случае, тогда как объяснить результаты примера, предоставленного в теме?

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Стоило уточнить на какой платформе ты всё это дело запускаешь :)
    Проще будет сделать так:
    1. /* gettime(&hour, &minute, &second)
    2.  * The return value is the number of seconds since 1 January 1970 (Unix system
    3.  * time).
    4.  */
    5. static cell AMX_NATIVE_CALL n_gettime(AMX *amx, cell *params)
    6. {
    7. time_t sec1970;
    8. struct tm gtm;
    9. cell *cptr;
    10.  
    11. assert(params[0]==(int)(3*sizeof(cell)));
    12.  
    13. time(&sec1970);
    14.  
    15. /* on DOS/Windows, the timezone is usually not set for the C run-time
    16.   * library; in that case gmtime() and localtime() return the same value
    17.   */
    18. gtm=*localtime(&sec1970);
    19. if (amx_GetAddr(amx,params[1],&cptr)==AMX_ERR_NONE)
    20. *cptr=gtm.tm_hour;
    21. if (amx_GetAddr(amx,params[2],&cptr)==AMX_ERR_NONE)
    22. *cptr=gtm.tm_min;
    23. if (amx_GetAddr(amx,params[3],&cptr)==AMX_ERR_NONE)
    24. *cptr=gtm.tm_sec;
    25.  
    26. /* the time() function returns the number of seconds since January 1 1970
    27.   * in Universal Coordinated Time (the successor to Greenwich Mean Time)
    28.   */
    29. return sec1970;
    30. }

    Это исходный код функции из Open SAMP.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    punkochel (22.10.2020)
  6. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Таки да, возвращаемый timestamp обозначает время в UTC+0, в то время как значения, возвращаемые в параметрах hour, minute и second основываются на местном времени.
    Собственно, это и можно увидеть в коде из поста выше: функция time() получает Unix-время, которое и возвращается из gettime() напрямую, когда время, возвращаемое через hour, minute и second, основывается на результате из функции localtime(), которая не только конвертирует timestamp в отдельные временные составляющие, но и корректирует их под настройки часового пояса в системе (просто конверсию выполняет gmtime()).

    P.S.: Добавил примечание об этой особенности в описание функции на wiki: https://wiki.pro-pawn.ru/wiki/Gettime
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. Пользователь сказал cпасибо:
    punkochel (22.10.2020)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •