временная метка Windows (C ++)

0

Я создаю функцию timestamp() окна, и я получил неправильную проверку чисел функцией PHP microtime():

  • C++= 1409802313
  • PHP= 1410655505

В этом параграфе C++ принят код:

#include <windows.h>
#include <iostream> // <--- Console I/O
#include <cstdlib> // <--- Command Line
#include <sstream>

using namespace std;

void print(string value){cout << value;}

string parseStr(int value)
{
ostringstream stream;
stream<<value<<flush;

return stream.str();
}


// ============================================================
//                         TIMESTAMP
// ============================================================
string timestamp()
{
SYSTEMTIME system_time;
GetLocalTime(&system_time);

int year = system_time.wYear;
int month = system_time.wMonth;
int day = system_time.wDay;
int hour = system_time.wHour;
int minute = system_time.wMinute;
int second = system_time.wSecond;
int milliseconds = system_time.wMilliseconds;

int day_of_year = 0;
 if (month > 1){day_of_year += 31;} // Sausis
 if (month > 2){day_of_year += 28;} // Vasaris
 if (month > 3){day_of_year += 31;} // Kovas
 if (month > 4){day_of_year += 30;} // Balandis
 if (month > 5){day_of_year += 31;} // Geguze
 if (month > 6){day_of_year += 30;} // Birzelis
 if (month > 7){day_of_year += 31;} // Liepa
 if (month > 8){day_of_year += 31;} // Rugpjutis
 if (month > 9){day_of_year += 30;} // Rugsejis
 if (month > 10){day_of_year += 31;} // Spalis
 if (month > 11){day_of_year += 30;} // Lapkritis
 if (month > 12){day_of_year += 31;} // Gruodis
day_of_year += day;

int time = 0;
time += (year - 1970) * 31536000;
time += day_of_year * 86400;
time += hour * 3600;
time += minute * 60;
time += second;

string time_string;
time_string = parseStr(time);

return time_string;
}
// ============================================================

int main()
{
 while(true)
 {
 system("cls");

 string time = timestamp();
 print(time);

 Sleep(100);
 }

return 0;
}

Я вычисляю что-то неправильно или что-то неправильно с целыми типами? :(

  • 0
    month_of_year > 12 ? Когда месяц может быть больше 12?
  • 0
    Вместо скриншотов, которые трудно прочитать, не могли бы вы просто опубликовать временные метки, которые вы получаете из своего кода и PHP?
Показать ещё 2 комментария
Теги:
timestamp
math

2 ответа

0
Лучший ответ

Ошибка здесь:

time += (year - 1970) * 31536000;

31536000 - это количество секунд в 365 дней. Но с 1970 года было 11 високосных дней, в эти годы 366 дней. Вы должны добавить 86400 для каждого из високосных дней.

Разница между двумя вашими результатами - 853192. Это немного меньше 10 дней, поэтому я не уверен, что произошло с 11-м височным днем. Это также 3 часа меньше, чем 10 дней (+ 8 секунд, что, я думаю, это время между двумя вашими испытаниями); что поскольку временные метки Unix основаны на GMT, а не на местном времени.

0

Вместо того, чтобы перематывать свою собственную метку времени, вы использовали бы эту работу:

time_t epochtime = time(NULL);

переменная эпоха должна содержать количество секунд с начала 1970 года.

Ваш код не учитывает високосные годы, что, вероятно, влияет на ваши вычисления и PHP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню