客服热线:18391752892

计算GMT偏差时间

   日期:2019-01-12     浏览:66    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 #include WinUser32.mqh

#import Kernel32.dll
int GetTimeZoneInformation(int TIME_ZONE_INFORMATION[]);
void GetSystemTime(int SYSTEMTIME[]);
#import

//------ Get GMT Offset by GetTimeZoneInformation() - modified from CrapperQuotes source ------//
int GMT_Off_GetTimeZoneInformation()//20
 {
   int a[43],offlocmin,n;

   n=TimeCurrent()-TimeLocal(); // server time - local time, in seconds

   switch(GetTimeZoneInformation(a))
   {
     case 0: // no daylight saving in local time zone, or unkown
       offlocmin=a[0];
       break;
     case 1: // local system is operating in standard time (no daylight saving time)
       offlocmin=a[0];
       break;
     case 2: // local system is operating in daylight saving time
       offlocmin=a[0]+a[42];
       break;
   }

   return(MathRound(n/3600.0-offlocmin/60.0));
 }
//------ Get GMT Offset by GetSystemTime() - unknown source ------//
int GMT_Off_GetSystemTime()//10
 {
   double GMT_Diff;
   int SYSTEMTIME[4];
   int nYear,nMonth,nDay,nHour,nMin,nSec,nMilliSec;
   string sMonth,sDay,sHour,sMin,sSec;
   string sUTC_Time;

   GetSystemTime(SYSTEMTIME);//API
   nYear   = SYSTEMTIME[0] 0x0000FFFF;
   nMonth    = SYSTEMTIME[0] 16;
   nDay     = SYSTEMTIME[1] 16;
   nHour   = SYSTEMTIME[2] 0x0000FFFF;
   nMin     = SYSTEMTIME[2] 16;
   nSec     = SYSTEMTIME[3] 0x0000FFFF;
   nMilliSec = SYSTEMTIME[3] 16;

   sMonth = 100 + nMonth;
   sMonth = StringSubstr(sMonth, 1);
   sDay   = 100 + nDay;
   sDay   = StringSubstr(sDay, 1);
   sHour = 100 + nHour;
   sHour = StringSubstr(sHour, 1);
   sMin   = 100 + nMin;
   sMin   = StringSubstr(sMin, 1);
   sSec   = 100 + nSec;
   sSec   = StringSubstr(sSec, 1);

   sUTC_Time=StringConcatenate(nYear, . ,sMonth, . ,sDay, ,sHour, : ,sMin, : ,sSec);

   GMT_Diff=TimeCurrent()-StrToTime(sUTC_Time);

   return(MathRound(GMT_Diff / 3600.0));
 }
 
// Get GMT Offset in several possible ways
int GetGMT_Offset()
 {
   bool IsPlausible1=false,IsPlausible2=false,IsIdentical=false;
   int GMT_Offset1,GMT_Offset2;

   GMT_Offset1 = GMT_Off_GetSystemTime();                 //10
   GMT_Offset2 = GMT_Off_GetTimeZoneInformation();           //20

   if(-12 =GMT_Offset1 GMT_Offset1 =12)
     IsPlausible1=true;
   if(-12 =GMT_Offset2 GMT_Offset2 =12)
     IsPlausible2=true;
   if(GMT_Offset1==GMT_Offset2)
     IsIdentical=true;

   if(IsIdentical IsPlausible1)
   {
     ERR_GMT_Offset=0;
     return(GMT_Offset1);
   }

   ERR_GMT_Offset++; // if not identical or not plausible, then increase error counter and return most suitable value

   if(IsPlausible1 !IsPlausible2)
     return(GMT_Offset1);
   else if(!IsPlausible1 IsPlausible2)
     return(GMT_Offset2);
   else // leave unchanged
   return(GMT_Offset);
 }复制代码

外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行