gst_diff = -9999.0;
cur_time = time(NULL);
- // cout << "Current greenwich mean time = " << asctime(gmtime(&cur_time))
- // << endl;
- // cout << "Current local time = "
- // << asctime(localtime(&cur_time)) << endl;
+ cout << "Current greenwich mean time = " << asctime(gmtime(&cur_time))
+ << endl;
+ cout << "Current local time = "
+ << asctime(localtime(&cur_time)) << endl;
if ( root != (string)"" ) {
- SGPath zone( root );
- zone.append( "zone.tab" );
- SG_LOG( SG_EVENT, SG_DEBUG, "Reading timezone info from: "
- << zone.str() );
- tzContainer = new TimezoneContainer( zone.c_str() );
-
- GeoCoord location( SGD_RADIANS_TO_DEGREES * lat, SGD_RADIANS_TO_DEGREES * lon );
- GeoCoord* nearestTz = tzContainer->getNearest(location);
-
- SGPath name( root );
- name.append( nearestTz->getDescription() );
- zonename = strdup( name.c_str() );
- // cout << "Using zonename = " << zonename << endl;
+ SGPath zone( root );
+ zone.append( "zone.tab" );
+ SG_LOG( SG_EVENT, SG_INFO, "Reading timezone info from: "
+ << zone.str() );
+ tzContainer = new TimezoneContainer( zone.c_str() );
+
+ GeoCoord location( SGD_RADIANS_TO_DEGREES * lat, SGD_RADIANS_TO_DEGREES * lon );
+ GeoCoord* nearestTz = tzContainer->getNearest(location);
+
+ SGPath name( root );
+ name.append( nearestTz->getDescription() );
+ zonename = strdup( name.c_str() );
+ SG_LOG( SG_EVENT, SG_INFO, "Using zonename = " << zonename );
} else {
- tzContainer = NULL;
- zonename = NULL;
+ SG_LOG( SG_EVENT, SG_INFO, "*** NO TIME ZONE NAME ***" );
+ tzContainer = NULL;
+ zonename = NULL;
}
}
return ( timegm(&mt) );
#elif defined( MK_TIME_IS_GMT )
time_t ret = mktime(&mt);
+
+#ifdef __CYGWIN__
+ ret -= _timezone;
+#endif
+
// This is necessary as some mktime() calls may
// try to access the system timezone files
// if this open fails errno is set to 2
// CYGWIN for one does this
- if ( errno ) {
- perror( "sgTimeGetGMT()" );
- errno = 0;
- }
+ // if ( errno ) {
+ // perror( "sgTimeGetGMT()" );
+ // errno = 0;
+ // }
+
+ // reset errno in any event.
+ errno = 0;
+
return ret;
#else // ! defined ( MK_TIME_IS_GMT )
// timezone seems to work as a proper offset for Linux & Solaris
-# if defined( __linux__ ) || defined( __sun__ )
+# if defined( __linux__ ) || defined( __sun__ ) ||defined(__CYGWIN__)
# define TIMEZONE_OFFSET_WORKS 1
# endif
+#if defined(__CYGWIN__)
+#define TIMEZONE _timezone
+#else
+#define TIMEZONE timezone
+#endif
+
time_t start = mktime(&mt);
SG_LOG( SG_EVENT, SG_DEBUG, "start1 = " << start );
// fgPrintf( SG_EVENT, SG_DEBUG, "start2 = %s", ctime(&start));
SG_LOG( SG_EVENT, SG_DEBUG, "(tm_isdst = " << mt.tm_isdst << ")" );
- timezone = fix_up_timezone( timezone );
+ TIMEZONE = fix_up_timezone( TIMEZONE );
# if defined( TIMEZONE_OFFSET_WORKS )
SG_LOG( SG_EVENT, SG_DEBUG,
- "start = " << start << ", timezone = " << timezone );
- return( start - timezone );
+ "start = " << start << ", timezone = " << TIMEZONE );
+ return( start - TIMEZONE );
# else // ! defined( TIMEZONE_OFFSET_WORKS )
daylight = mt.tm_isdst;
"OOOPS, problem in sg_time.cxx, no daylight savings info." );
}
- long int offset = -(timezone / 3600 - daylight);
+ long int offset = -(TIMEZONE / 3600 - daylight);
- SG_LOG( SG_EVENT, SG_DEBUG, " Raw time zone offset = " << timezone );
+ SG_LOG( SG_EVENT, SG_DEBUG, " Raw time zone offset = " << TIMEZONE );
SG_LOG( SG_EVENT, SG_DEBUG, " Daylight Savings = " << daylight );
SG_LOG( SG_EVENT, SG_DEBUG, " Local hours from GMT = " << offset );
- long int start_gmt = start - timezone + (daylight * 3600);
+ long int start_gmt = start - TIMEZONE + (daylight * 3600);
SG_LOG( SG_EVENT, SG_DEBUG, " March 21 noon (CST) = " << start );
* used in order to get the local time.
*
************************************************************************/
+
+#include <errno.h>
+#include <string.h>
#include <stdio.h>
#include "timezone.h"
-
Timezone::Timezone(float la, float lo, char* cc, char* desc) :
- GeoCoord(la, lo)
+ GeoCoord(la, lo)
{
- countryCode = strdup(cc);
- descriptor = strdup(desc);
+ countryCode = strdup(cc);
+ descriptor = strdup(desc);
}
/* Build a timezone object from a textline in zone.tab */
Timezone::Timezone(const char *infoString) :
- GeoCoord()
+ GeoCoord()
{
- int i = 0;
- while (infoString[i] != '\t')
- i++;
- char buffer[128];
- char latlon[128];
- strncpy(buffer, infoString, i);
- buffer[i] = 0;
- countryCode = strdup(buffer);
- i ++;
- int start = i;
- while (infoString[i] != '\t')
- i++;
- int size = i - start;
- strncpy(latlon, (&infoString[start]), size);
- latlon[size] = 0;
- char sign;
- sign = latlon[0];
- strncpy(buffer, &latlon[1], 2);
- lat = atof(buffer);
- strncpy(buffer, &latlon[3], 2);
- lat += (atof(buffer) / 60);
- int nextPos;
- if (strlen(latlon) > 12)
- {
- nextPos = 7;
- strncpy(buffer, &latlon[5], 2);
- lat += (atof(buffer) / 3600.0);
+ int i = 0;
+ while (infoString[i] != '\t')
+ i++;
+ char buffer[128];
+ char latlon[128];
+ strncpy(buffer, infoString, i);
+ buffer[i] = 0;
+ countryCode = strdup(buffer);
+ i ++;
+ int start = i;
+ while (infoString[i] != '\t') {
+ i++;
+ }
+ int size = i - start;
+ strncpy(latlon, (&infoString[start]), size);
+ latlon[size] = 0;
+ char sign;
+ sign = latlon[0];
+ strncpy(buffer, &latlon[1], 2);
+ lat = atof(buffer);
+ strncpy(buffer, &latlon[3], 2);
+ lat += (atof(buffer) / 60);
+ int nextPos;
+ if (strlen(latlon) > 12) {
+ nextPos = 7;
+ strncpy(buffer, &latlon[5], 2);
+ lat += (atof(buffer) / 3600.0);
+ } else {
+ nextPos = 5;
+ }
+ if (sign == '-') {
+ lat = -lat;
}
- else
- nextPos = 5;
- if (sign == '-')
- lat = -lat;
- sign = latlon[nextPos];
- nextPos++;
- strncpy(buffer, &latlon[nextPos], 3);
- lon = atof(buffer);
- nextPos += 3;
- strncpy(buffer, &latlon[nextPos], 2);
- buffer[2] = 0;
+ sign = latlon[nextPos];
+ nextPos++;
+ strncpy(buffer, &latlon[nextPos], 3);
+ lon = atof(buffer);
+ nextPos += 3;
+ strncpy(buffer, &latlon[nextPos], 2);
+ buffer[2] = 0;
- lon += (atof(buffer) / 60);
- if (strlen(latlon) > 12)
- {
- nextPos += 2;
- strncpy(buffer, &latlon[nextPos], 2);
- lon += (atof (buffer) / 3600.00);
+ lon += (atof(buffer) / 60);
+ if (strlen(latlon) > 12) {
+ nextPos += 2;
+ strncpy(buffer, &latlon[nextPos], 2);
+ lon += (atof (buffer) / 3600.00);
}
- if (sign == '-')
- lon = -lon;
- i ++;
- start = i;
- while (!((infoString[i] == '\t') || (infoString[i] == '\n')))
- i++;
- size = i - start;
- strncpy(buffer, (&infoString[start]), size);
- buffer[size] = 0;
- descriptor = strdup(buffer);
+ if (sign == '-') {
+ lon = -lon;
+ }
+ i ++;
+ start = i;
+ while (!((infoString[i] == '\t') || (infoString[i] == '\n'))) {
+ i++;
+ }
+ size = i - start;
+ strncpy(buffer, (&infoString[start]), size);
+ buffer[size] = 0;
+ descriptor = strdup(buffer);
}
/* the copy constructor */
Timezone::Timezone(const Timezone& other)
{
- lat = other.getLat();
- lon = other.getLon();
- countryCode = strdup(other.countryCode);
- descriptor = strdup(other.descriptor);
+ lat = other.getLat();
+ lon = other.getLon();
+ countryCode = strdup(other.countryCode);
+ descriptor = strdup(other.descriptor);
}
TimezoneContainer::TimezoneContainer(const char *filename)
{
- char buffer[256];
- FILE* infile = fopen(filename, "r");
- if (!(infile))
- {
- fprintf(stderr, "Unable to open file %s\n", filename);
- exit(1);
- }
- else
- {
-
- while (1)
- {
- fgets(buffer, 256, infile);
- if (feof(infile))
- break;
- for (int i = 0; i < 256; i++)
- {
- if (buffer[i] == '#')
- buffer[i] = 0;
- }
- if (buffer[0])
- {
- data.push_back(new Timezone(buffer));
- }
- }
+ char buffer[256];
+ FILE* infile = fopen(filename, "rb");
+ if (!(infile)) {
+ fprintf(stderr, "Unable to open file %s\n", filename);
+ exit(1);
+ } else {
+ errno = 0;
+
+ while (1) {
+ fgets(buffer, 256, infile);
+ if (feof(infile)) {
+ break;
+ }
+ for (int i = 0; i < 256; i++) {
+ if (buffer[i] == '#') {
+ buffer[i] = 0;
+ }
+ }
+ if (buffer[0]) {
+ data.push_back(new Timezone(buffer));
+ }
+ }
+ if ( errno ) {
+ perror( "TimezoneContainer()" );
+ errno = 0;
+ }
}
}