|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум Корзина форума Корзина Не правильно записывает время в UnixTime |
Не правильно записывает время в UnixTime |
Сам код
Код для того чтобы записывало время 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 |
secsToTimeString это перевод из секунд в текст. Например выводом будет "5 Day(s) 9 Hour(s) 5 Minute(s) 3 Second(s)"
То есть в базу ты пытаешься писать именно строку с текстом. Тем более "sWorld->GetUptime()" - это сколько секунд работает сервер, а не текущая метка времени. Если нужна именно текущая юникс метка времени, то в запрос достаточно поставить sql функцию "UNIX_TIMESTAMP()". |
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)
Сообщение # 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
|
Code Находишь в файле world.cpp вызов подготовленного выражения LOGIN_UPD_UPTIME_PLAYERS (это и есть место где заносятся значения в uptime) и смотришь откуда растут ноги у переменной m_startTime. Там будет понятно где и какой функцией получено значение. Ну на счет этого я поковыряюсь в world + я уже видел там такую строку. Ну если получится, с меня 2 плюса.
Сообщение # 6 написано 26.09.2012 в 08:15
|
эм, %d - это число, а Вы ему передаете строку, потому, число, которое он записывает - это не время, а адрес, по которому расположены те две переменные в памяти. Для получения времени в формате UNIX timestamp используется функция time()
П.С. как и описали выше, Вы можете использовать mysql функцию UNIX_TIMESTAMP Пример: INSERT INTO account_time VALUES ('%u', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW())) |
Quote (Vicher) UNIX_TIMESTAMP(NOW() Без now() оно тебе выведет тоже самое что и пытался вывести с now. Так что now тут лишний, если нужна текущая метка времени. Пруф: unix_timestamp, now.
Сообщение # 8 написано 26.09.2012 в 12:17
|
| |||
| |||