获取本地时间和网络时间

来源:互联网 发布:c语言常量 编辑:程序博客网 时间:2024/04/26 05:55

游戏中通常都会有根据时间来恢复体力值的设定,但是如果是本地时间的话,玩家可以通过修改本地时间的作弊行为来达到迅速恢复体力的目的。RT,我们便需要根据网络时间来进行判定。

1、获取本地时
Ps:别忘了添加需要的头文件

void getLocationTime(){    struct tm *tm;    time_t timep;#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)    time(&timep);#else    struct timeval tv;    gettimeofday(&tv,NULL);    timep = tv.tv_sec;#endif    tm = localtime(&timep);    int year = tm->tm_year + 1900;    int month = tm->tm_mon + 1;    int day = tm->tm_mday;    int hour=tm->tm_hour;    int minute=tm->tm_min;    int second=tm->tm_sec;    std::cout << "当前日期:" << year << "-" << month << "-" << day << std::endl;    std::cout << "当前时间:" << hour << ":" << minute << ":" << second << std::endl;}

2、获取网络时间
这里是利用百度的时间url来获取网络时间

直接上代码:
NetTime.h

#define __NETTIME_H___#ifdef __NETTIME_H___#include "cocos2d.h"#include "network/HttpClient.h"USING_NS_CC;using namespace network;class NetTime : public Node{public:    NetTime();    ~NetTime();    CREATE_FUNC(NetTime);    CC_SYNTHESIZE(int, nDay, Day);    CC_SYNTHESIZE(int, nMonth, Month);    CC_SYNTHESIZE(int, nYear, Year);    CC_SYNTHESIZE(int, nHour, Hour);    CC_SYNTHESIZE(int, nMinute, Minute);    CC_SYNTHESIZE(int, nSecond, Second);    CC_SYNTHESIZE(time_t, tTime, Time);    void onRequestTime();    static void splitString(std::vector<std::string> &contentVector, std::string content, std::string pattern);    void onHttpComplete(HttpClient * sender, HttpResponse * response);    void spliteTime(std::string htmlStr);    void initTime(time_t time);    static NetTime* getInstance();    static NetTime* pInstance;};#endif

NetTime.cpp

#include "NetTime.h"NetTime* NetTime::pInstance = NULL;NetTime::NetTime() : nDay(0), nMonth(0), nYear(0), nHour(0), nMinute(0), nSecond(0){}NetTime::~NetTime(){}void NetTime::onRequestTime(){    HttpRequest* request = new HttpRequest();    request->setUrl("http://open.baidu.com/special/time/");//baidu getNetTime api    request->setRequestType(HttpRequest::Type::GET);    request->setTag("getNetTime");    request->setResponseCallback(this, httpresponse_selector(NetTime::onHttpComplete));    HttpClient::getInstance()->send(request);}void NetTime::onHttpComplete(HttpClient * sender, HttpResponse * response){    if (!response)        return;    if (0 != strlen(response->getHttpRequest()->getTag()))    {        CCLOG("%s  completed", response->getHttpRequest()->getTag());    }    int statusCode = response->getResponseCode();    char statusString[64] = {};    sprintf_s(statusString, "HTTP Status : %d, tag = %s", statusCode, response->getHttpRequest()->getTag());    CCLOG("%s", statusString);    if (!response->isSucceed())    {        CCLOG(" response failed !");        CCLOG(" error buffer is :%s", response->getErrorBuffer());        return;    }    std::vector<char> * buffer = response->getResponseData();    std::string str;    for (unsigned i = 0; i < buffer->size(); i++)    {        char a = (*buffer)[i];        str.append(1, a);    }    spliteTime(str);}void NetTime::spliteTime(std::string htmlStr){    std::vector<std::string> tmp;    splitString(tmp, htmlStr, "baidu_time");    std::string str = tmp.at(2);    std::string tmpTime = str.substr(1, 10);    time_t tt = atoi(tmpTime.c_str());    initTime(tt);}void NetTime::initTime(time_t time){    time_t t;    struct tm* p;    t = time;    p = localtime(&t);    setSecond(p->tm_sec);    setMinute(p->tm_min);    setHour(p->tm_hour);    setDay(p->tm_mday);    setMonth(p->tm_mon + 1);    setYear(p->tm_year + 1900);    setTime(t);    log("time is : %d-%d-%d %d:%d:%d", getYear(), getMonth(), getDay(), getHour(), getMinute(), getSecond());}//切割字符串void NetTime::splitString(std::vector<std::string> &contentVector, std::string content, std::string pattern){    std::string::size_type pos;    content += pattern;    int size = content.size();    for (int i = 0; i < size; i++)    {        pos = content.find(pattern, i);        if (pos < size)        {            std::string s = content.substr(i, pos - i);            contentVector.push_back(s);            i = pos + pattern.size() - 1;        }    }}NetTime* NetTime::getInstance(){    if (pInstance == NULL)    {        pInstance = new NetTime;    }    return pInstance;}
1 0