vc 获取网络时间

方式1 :

#include <WinSock2.h>

#include <Windows.h>

#pragma comment(lib, "WS2_32")  // 链á′接ó到μ?WS2_32.lib

class CInitSock

{

public:

CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)

{

// 初3?始ê?化ˉWS2_32.dll

WSADATA wsaData;

WORD sockVersion = MAKEWORD(minorVer, majorVer);

if(::WSAStartup(sockVersion, &wsaData) != 0)

{

exit(0);

}

}

~CInitSock()

{

::WSACleanup();

}

};

CInitSock initS;

BOOL NistGetTime(LPFILETIME OutTime)

{

BOOL bOk;

struct hostent *host;

bOk = FALSE;

if (host = gethostbyname("time.nist.gov"))

{

SOCKET s;

in_addr ia;

CHAR IpText[32];

memcpy(&ia, host->h_addr, host->h_length);

lstrcpyA(IpText, inet_ntoa(ia));

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (s != INVALID_SOCKET)

{

sockaddr_in sac;

memset(&sac, 0, sizeof(sac));

sac.sin_family = AF_INET;

sac.sin_port = htons(37);

sac.sin_addr.s_addr = inet_addr(IpText);

if (connect(s, (sockaddr*)&sac, sizeof(sac)) == 0)

{

ULONG nTime;

if (recv(s, (PCHAR)&nTime, sizeof(nTime), 0) == sizeof(nTime))

{

LONGLONG llt;

nTime = ntohl(nTime);

llt = 0x014F373BFDE04000;//1900.1.1

llt += LONGLONG(nTime) * 10000000;

memcpy(OutTime, &llt, sizeof(FILETIME));

bOk = TRUE;

}

}

closesocket(s);

}

}

return bOk;

}

int _tmain(int argc, _TCHAR* argv[])

{

FILETIME ft;

CInitSock initS;

NistGetTime(&ft);

SYSTEMTIME st;

FileTimeToSystemTime(&ft,&st);

return 0;

}

方式2 mfc:

CTime NistGetTime()

{

//时间同步

CSocket sockClient;

TIME_ZONE_INFORMATION tzinfo;

DWORD dwStandardDaylight;

long bias,sminute,shour;

vector <string> vi;

string strServer;

BOOL ret;

//将时间服务器放在一个VECTOR中。

strServer = "time.nist.gov";

vi.push_back(strServer);

strServer = "time-a.nist.gov";

vi.push_back(strServer);

strServer = "time-b.nist.gov";

vi.push_back(strServer);

strServer = "time-nw.nist.gov";

vi.push_back(strServer);

strServer = "nist1.nyc.certifiedtime.com";

vi.push_back(strServer);

strServer = "time-b.nist.gov";

vi.push_back(strServer);

//初始化CSocket

AfxSocketInit();

sockClient.Create();   //创建socket

dwStandardDaylight = GetTimeZoneInformation(&tzinfo); //获取时区与UTC的时间差 应该返回-8

bias = tzinfo.Bias;

if (dwStandardDaylight == TIME_ZONE_ID_INVALID) //函数执行失败

{

return;

}

if (dwStandardDaylight == TIME_ZONE_ID_STANDARD) //标准时间有效

bias += tzinfo.StandardBias;

if (dwStandardDaylight == TIME_ZONE_ID_DAYLIGHT) //夏令时间

bias += tzinfo.DaylightBias;

shour = bias/60;

sminute = fmod((float)bias,60);

//循环判断服务器是否连接成功

for (int n=0; n < vi.size(); ++ n)

{

ret = sockClient.Connect(vi[n].c_str(),13);

if (1 == ret)

break;

}

unsigned char nTime[100] = {0}; //临时接收数据要求足够的大

sockClient.Receive(nTime, sizeof(nTime)); //接收服务器发送来得的数据

sockClient.Close();    //关闭socket

CString strTime;

strTime.Format("%s",nTime);

int first=strTime.Find("-");

int second=strTime.Find("-",first+1);

int tfirst = strTime.Find(":");

int tsecond = strTime.Find(":",tfirst+1);

int hyear=2000+atoi(strTime.Mid(first-2,2));

int hmonth=atoi(strTime.Mid(first+1,2));

int hday=atoi(strTime.Mid(second+1,2));

int hhour=atoi(strTime.Mid(tfirst-2,2))-shour;

int hminute=atoi(strTime.Mid(tfirst+1,2))-sminute;

int hsecond=atoi(strTime.Mid(tsecond+1,2));

CTime temptime(hyear,hmonth,hday,hhour,hminute,hsecond);

return temptime;

}

来自为知笔记(Wiz)

时间: 2024-10-13 21:01:46

vc 获取网络时间的相关文章

cocos2dx获取网络时间(一)

今天在公司的cocos2dx项目中遇到一个需求,需要获取网络时间和系统时间对比,目的是防止用户更改系统时间进行某些非法操作 . 那么cocos2dx怎么来获取网络时间呢 ?我整理的思路如下: (1)由一个web api可以返回当前的网络时间 (2)cocos2dx通过http请求该api获取数据到本地 (3)cocos2dx解析数据得到当前的网络时间 一:首先就需要一个web接口来提供网络时间的数据,我在这里自己搭建一个WCF服务返回需要的数据. 新建WCF服务应用程序 , 项目命名为NetTi

.net 获取网络时间(北京时间)24小时制

/// <summary> /// 更新系统时间 /// </summary> public class UpdateTime { //设置系统时间的API函数 [DllImport("kernel32.dll")] private static extern bool SetLocalTime(ref SYSTEMTIME time); [StructLayout(LayoutKind.Sequential)] private struct SYSTEMTIM

实时获取网络时间 并转换为北京时间的函数

unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Winapi.msxml, System.DateUtils, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton

多方法获取网络时间

转自:http://blog.csdn.net/xiaoxian8023/article/details/7250385 在做YH维护的时候,偶尔会碰到这样的问题:电脑的非正常关机导致系统时间出错(变为了2002-1-1),从而影响到项目系统的使用.尤其是设计到money的系统,如果时间错误,可能会导致无法想象的后果.所以我们可能需要用系统和网络的双重验证. 通过收集.修改.优化和测试,剔除了一些错误的和速度超慢的,只剩下了4种可行的方案.这些方案中主要有3类: 一.通过向某网站发送请求,获取服

cocos2dx获取网络时间(二):浅析CCHttpClient

在上一篇文章cocos2dx获取网络时间(一)中,我们使用CCHttpClient进行网络时间的数据请求和使用rapidjson解析Http请求得到的json数据 .在文章的最后 ,我留下了一个问题,怎么封装一个类来实现我们的方法. 新建一个c++类 ,命名为NetTime,继承自CCNode并重写init()方法.然后引入CCHttpClient和rapidjson需要的头文件.我们的需求是可以返回NetTime的年,月,日,小时,分和秒,分别定义它们的private字段和public方法:

获取网络时间

这两天有一个应用需要获取网络时间,虽然一直知道可以从时间服务器获取时间,却从来也没有操作过,借这个机会重新进行一下深入了了解. 基本的思路就是:通过SOCKET连接时间服务器,直接接收从服务器发送的过来的时间数据. void GetNetTime() { TIME_ZONE_INFORMATION tzinfo; DWORD dwStandardDaylight; int nRet; /* Get server IP */ struct hostent *host; char *pServerI

iOS获取网络时间与转换格式

[NSDate date]可以获取系统时间,但是会造成一个问题,用户可以自己修改手机系统时间,所以有时候需要用网络时间而不用系统时间.获取网络标准时间的方法: 1.先在需要的地方实现下面的代码,创建一个URL并且连接 1 NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"]; 2 NSURLRequest *request=[NSURLRequest requestWithURL:url]; 3 NSURLConnection

获取网络时间失败,求大神指点

private void GainTime() { new Thread(new Runnable() { @Override public void run() { try { URL url=new URL("http://www.taobao.com"); URLConnection uc=url.openConnection(); uc.connect(); long id=uc.getDate(); Date date=new Date(id); SimpleDateForm

VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法

1.使用CTime类(获取系统当前时间,精确到秒) CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();//获取系统日期 str=tm.Format("现在时间是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK); a,从CTimet中提取年月日时分秒 CTime t = CTime::GetCurrentTime(); int d=t.GetDay(); //获得几号 int y=t.