//+------------------------------------------------------------------+
//|                                                      TimeGMT.mq4 |
//+------------------------------------------------------------------+
#import "kernel32.dll"
void		GetSystemTime(int& TimeArray[]);
int		GetTimeZoneInformation(int& TZInfoArray[]);
#import
int		TimeArray[4],
			TZInfoArray[43];

//+------------------------------------------------------------------+
int deinit()
{
	Comment("");
}

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
	Print("LocalGmtOffset     = "	+LocalGmtOffset()		/60);
	Print("ServerGmtOffset  = "	+ServerGmtOffset()	/60);
	Print("LocalServerOffset = "	+LocalServerOffset()	/60);

	while(!IsStopped())
	{
		Comment(	"\nGMT:  ",		sTimeGMT(),
					"\nLocal:   ",	TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS),
					"\nServer:",	TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));

//		Sleep(100);
	}

	return(0);
}

//+------------------------------------------------------------------+
int ServerGmtOffset()
{
	int shift = (TimeCurrent()-TimeGMT()) / 60;	
	return(RoundClosest(shift,15));			// Round towards closest 15 min.
}

//+------------------------------------------------------------------+
int LocalServerOffset()
{
	int shift = (TimeLocal()-TimeCurrent()) / 60;
	return(RoundClosest(shift,15));			// Round towards closest 15 min.
}


//+------------------------------------------------------------------+
int LocalGmtOffset()
{
	int gmt_shift=0;
	int ret=GetTimeZoneInformation(TZInfoArray);
	if(ret!=0) gmt_shift=TZInfoArray[0];	//	Difference between your local time and GMT in minutes (winter time)
	if(ret==2) gmt_shift+=TZInfoArray[42];	//	Current difference between your local time and GMT in minutes
	return(-gmt_shift);
}

//+------------------------------------------------------------------+
int RoundClosest(int n, int step)
{
	if(n > 0)	n += step/2;
	else			n -= step/2;
	return(n - n%step);
}

//+------------------------------------------------------------------+
datetime TimeGMT()
{
	return(StrToTime(sTimeGMT()));
}

//+------------------------------------------------------------------+
string sTimeGMT()
{
	GetSystemTime(TimeArray);
	string YY = TimeArray[0]&0x0000FFFF;
	string MM = TimeArray[0]>>16;
	string DD = TimeArray[1]>>16;
	string hh = TimeArray[2]&0x0000FFFF;
	string mm = TimeArray[2]>>16;
	string ss = TimeArray[3]&0x0000FFFF;
//	string ms = TimeArray[3]>>16;

	while(StringLen(YY)<4) YY = "0"+YY;
	while(StringLen(MM)<2) MM = "0"+MM;
	while(StringLen(DD)<2) DD = "0"+DD;
	while(StringLen(hh)<2) hh = "0"+hh;
	while(StringLen(mm)<2) mm = "0"+mm;
	while(StringLen(ss)<2) ss = "0"+ss;
//	while(StringLen(ms)<3) ms = "0"+ms;

	return(StringConcatenate(YY,".",MM,".",DD," ",hh,":",mm,":",ss/*,".",ms*/));
}


