• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Не правильно записывает время в UnixTime
doomkas
Центурион
Сам код

Код для того чтобы записывало время
std::string time1 = secsToTimeString(0);
std::string time2 = secsToTimeString(300);

Сам код который добавляет акк и время в базу

LoginDatabase.PExecute("INSERT INTO account_time VALUES ('%u', '%d', '%d')", playerAccountId, time1, time2);

Бред заключается в том, то что не добавляется точное время, а тоесть пишет типо 1046344960, а по идее должен такой точный код unixtime записать 1346753964
Кто знает как эту проблемы решить.
За подсказки с меня 2 + са То есть сейчас, и через неделю.

Добавлено (25.09.2012, 10:24)
---------------------------------------------
Добавление времени происходит через команду. Я выложил только куски, которые прописывают время в unixtime

Сам пример есть в базе uptime
Сообщение # 1 отредактировано doomkas - Вторник, 25.09.2012, 16:50
Paralitik
Чемпион
Может время не верно выставлено на самой машине, раз часы отстают на несколько лет )))
Попробуй синхронизироваться с каким нито нтп сервером

Кстати, time1 чем то отличается от time2? )))
Сообщение # 2 отредактировано Paralitik - Вторник, 25.09.2012, 11:33
Прадмур
~
secsToTimeString это перевод из секунд в текст. Например выводом будет "5 Day(s) 9 Hour(s) 5 Minute(s) 3 Second(s)"
То есть в базу ты пытаешься писать именно строку с текстом.
Тем более "sWorld->GetUptime()" - это сколько секунд работает сервер, а не текущая метка времени.

Если нужна именно текущая юникс метка времени, то в запрос достаточно поставить sql функцию "UNIX_TIMESTAMP()".
Сообщение # 3 отредактировано Прадмур - Вторник, 25.09.2012, 12:47
doomkas
Центурион
Code
Кстати, time1 чем то отличается от time2? )))

Там я поставлю еще добавочное время, ну там на 5 минут вперед.

Прадмур
Дело в том, я не могу понять как сделать так, чтобы записывало время так же как и старт сервера в uptime в unix_time

Добавлено (25.09.2012, 16:49)
---------------------------------------------

Code
Может время не верно выставлено на самой машине, раз часы отстают на несколько лет )))  
Попробуй синхронизироваться с каким нито нтп сервером

Нет с временем все нормально. Тогда бы тоже самое писало в uptime

Добавлено (25.09.2012, 16:51)
---------------------------------------------

Code
"sWorld->GetUptime()"

Это убрал т.к сам не знаю зачем добавил ) Раньше у меня по другому написано было.

Добавлено (25.09.2012, 17:07)
---------------------------------------------
Я так и не понял где этот UNIX_TIMESTAMP() писать )
LoginDatabase.PExecute("INSERT INTO account_time VALUES ('%u', '%d < UNIX_TIMESTAMP()', '%d')", playerAccountId, time1, time2);
Попробовал так тупо время в на 10 цифр поднялось )

LoginDatabase.PExecute("INSERT INTO account_time VALUES ('%u', 'UNIX_TIMESTAMP()', '%d')", playerAccountId, time1, time2);
А так вапще 0 )

Сообщение # 4 написано 25.09.2012 в 17:07
Прадмур
~
Quote (doomkas)
Дело в том, я не могу понять как сделать так, чтобы записывало время так же как и старт сервера в uptime в unix_time

Находишь в файле world.cpp вызов подготовленного выражения LOGIN_UPD_UPTIME_PLAYERS (это и есть место где заносятся значения в uptime) и смотришь откуда растут ноги у переменной m_startTime. Там будет понятно где и какой функцией получено значение.

Quote (doomkas)
Я так и не понял где этот UNIX_TIMESTAMP() писать )

Так посмотри примеры запросов в гугле. Их там огромное множество. Там и можно разобраться как это делается.
Да даже далеко ходить не нужно. В самом ядре тоже используются подобные запросы, например, при блокировании персонажа.
А ещё лучше почитай справку по этой функции, чтобы понять что она делает и как её использовать.
Сообщение # 5 написано 26.09.2012 в 02:56
doomkas
Центурион
Code
Находишь в файле world.cpp вызов подготовленного выражения LOGIN_UPD_UPTIME_PLAYERS (это и есть место где заносятся значения в uptime) и смотришь откуда растут ноги у переменной m_startTime. Там будет понятно где и какой функцией получено значение.


Ну на счет этого я поковыряюсь в world + я уже видел там такую строку. Ну если получится, с меня 2 плюса.
Сообщение # 6 написано 26.09.2012 в 08:15
Vicher
Admin
эм, %d - это число, а Вы ему передаете строку, потому, число, которое он записывает - это не время, а адрес, по которому расположены те две переменные в памяти. Для получения времени в формате UNIX timestamp используется функция time()

П.С. как и описали выше, Вы можете использовать mysql функцию UNIX_TIMESTAMP
Пример: INSERT INTO account_time VALUES ('%u', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW()))
Сообщение # 7 отредактировано Vicher - Среда, 26.09.2012, 11:49
Прадмур
~
Quote (Vicher)
UNIX_TIMESTAMP(NOW()

Без now() оно тебе выведет тоже самое что и пытался вывести с now.
Так что now тут лишний, если нужна текущая метка времени.

Пруф: unix_timestamp, now.
Сообщение # 8 написано 26.09.2012 в 12:17
  • Страница 1 из 1
  • 1
Поиск: