🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.internat
Article #40

Re: International time zones

#40
From: Otto J. Makela
Date: Mon, 21 Aug 1989 22:14
97 lines
3322 bytes
I wrote this program quite some time ago...
Since I've seen CET in place of MET, is this standard ?
Who can add to these zone names ?
--
	/*	Display the time zone names with the minute differences given as
		argument.  If "-" is given as argument, switch DST mode */
	/*	Add: automatic setting of DST depending on current date */
#include	<stdio.h>
#include	"config.h"
char *timezone(int zone, int dst);
main(argc,argv)
int argc;
char *argv[];	{
	register int i,j;
	int arg,dst=0;
 
#ifdef	MSDOS
	*argv="timezone";
#endif
	if(argc<2)	{
		fprintf(stderr,"usage: %s [-] minutes_east_of_greenwich...\n",*argv);
		return(1);
	}
 
	for(arg=1; arg<argc; arg++)
		if(*argv[arg]=='-' && !argv[arg][1])
			dst=!dst;
		else	{
			i=atoi(argv[arg]); j=(i<0)?-i:i;
			printf("%s: %4d minutes (%02dh%02dm) %s of greenwich %s"
				"is \"%s\"\n",*argv,j,j/60,j%60,i>0?"east":"west",
				dst?"during DST ":"",timezone(i,dst));
		}
}
 
	/*	The arguments are the number of minutes of time you are eastward from
	 *	Greenwich and whether DST is in effect.  It returns pointer to a string
	 *	giving the name of the local timezone.
	 *
	 *	Sorry, I don't know all the names.
	 */
 
static struct zone {
	int	offset;
	char	*stdzone;
	char	*dlzone;
} zonetab[] = {
	1*60, "MET", "MET DST",	/* Middle European */
	2*60, "EET", "EET DST",	/* Eastern European */
	-4*60, "AST", "ADT",	/* Atlantic */
	-5*60, "EST", "EDT",	/* Eastern */
	-6*60, "CST", "CDT",	/* Central */
	-7*60, "MST", "MDT",	/* Mountain */
	-8*60, "PST", "PDT",	/* Pacific */
#ifdef notdef
	/* there's no way to distinguish this from WET */
	0, "GMT", 0,			/* Greenwich */
#endif
	0*60, "WET", "WET DST",	/* Western European */
 
	/* Do they use DST in Australia ? */
	10*60, "EST", "EST",	/* Aust: Eastern */
	10*60-30, "CST", "CST",	/* Aust: Central */
	8*60, "WST", "WST",		/* Aust: Western */
	-1
};
 
char *timezone(zone, dst)
{
	register struct zone *zp;
	static char czone[10];
	char sign = '+';
	register char *p, *q;
	char *getenv(), *index();
 
	for (zp=zonetab; zp->offset!=-1; zp++)
		if (zp->offset==zone) {
			if (dst && zp->dlzone)
				return(zp->dlzone);
			if (!dst && zp->stdzone)
				return(zp->stdzone);
		}
 
		/* Not a standard zone, give it as { "+" | "-" } 4digit format */
	if (zone<0) {
		zone = -zone;
		sign = '-';
	}
	sprintf(czone, "%c%02d%02d", sign, zone/60, zone%60);
	return(czone);
}

-- 
* * * Otto J. Makela (otto@jyu.fi, MAKELA_OTTO_@FINJYU.BITNET) * * * * * * *
* Phone: +358 41 613 847, BBS: +358 41 211 562 (CCITT, Bell 2400/1200/300) *
* Mail: Kauppakatu 1 B 18, SF-40100 Jyvaskyla, Finland, EUROPE             *
* * * freopen("/dev/null","r",stdflame); * * * * * * * * * * * * * * * * * *
Technical Details
Message-ID: <1177@tukki.jyu.fi>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.csd.uwm.edu!cs.utexas.edu!uunet!mcvax!sunic!kth!draken!tut!tukki!otto
References: <993@ks.UUCP> <383@shodha.dec.com> <1043@riddle.UUCP> <1044@riddle.UUCP>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.csd.uwm.edu!cs.utexas.edu!uunet!mcvax!sunic!kth!draken!tut!tukki!otto
From: otto@tukki.jyu.fi (Otto J. Makela)
Newsgroups: comp.std.internat
Subject: Re: International time zones
Summary: Small program attempts to guess zone name
Message-ID: <1177@tukki.jyu.fi>
Date: 21 Aug 89 22:14:59 GMT
References: <993@ks.UUCP> <383@shodha.dec.com> <1043@riddle.UUCP> <1044@riddle.UUCP>
Reply-To: otto@tukki.jyu.fi (Otto J. Makela)
Organization: Grand Hall of Justice, Mega-City One
Lines: 97