1*15096Skarels /* @(#)timezone.c 4.4 (Berkeley) 09/25/83 */ 21993Swnj /* 31993Swnj * The arguments are the number of minutes of time 41993Swnj * you are westward from Greenwich and whether DST is in effect. 51993Swnj * It returns a string 61993Swnj * giving the name of the local timezone. 71993Swnj * 81993Swnj * Sorry, I don't know all the names. 91993Swnj */ 101993Swnj 111993Swnj static struct zone { 121993Swnj int offset; 131993Swnj char *stdzone; 141993Swnj char *dlzone; 151993Swnj } zonetab[] = { 16*15096Skarels -1*60, "MET", "MET DST", /* Middle European */ 17*15096Skarels -2*60, "EET", "EET DST", /* Eastern European */ 181993Swnj 4*60, "AST", "ADT", /* Atlantic */ 191993Swnj 5*60, "EST", "EDT", /* Eastern */ 201993Swnj 6*60, "CST", "CDT", /* Central */ 211993Swnj 7*60, "MST", "MDT", /* Mountain */ 221993Swnj 8*60, "PST", "PDT", /* Pacific */ 2313877Ssam #ifdef notdef 2413877Ssam /* there's no way to distinguish this from WET */ 251993Swnj 0, "GMT", 0, /* Greenwich */ 2613877Ssam #endif 2713877Ssam 0*60, "WET", "WET DST", /* Western European */ 2812974Ssam -10*60, "EST", "EST", /* Aust: Eastern */ 2912974Ssam -10*60+30, "CST", "CST", /* Aust: Central */ 3012974Ssam -8*60, "WST", 0, /* Aust: Western */ 311993Swnj -1 321993Swnj }; 331993Swnj 341993Swnj char *timezone(zone, dst) 351993Swnj { 361993Swnj register struct zone *zp; 371993Swnj static char czone[10]; 381993Swnj char *sign; 3912974Ssam register char *p, *q; 4012974Ssam char *getenv(), *index(); 411993Swnj 4212974Ssam if (p = getenv("TZNAME")) { 4312974Ssam if (q = index(p, ',')) { 4412974Ssam if (dst) 4512974Ssam return(++q); 4612974Ssam else { 4712974Ssam *q = '\0'; 4812974Ssam strncpy(czone, p, sizeof(czone)-1); 4912974Ssam czone[sizeof(czone)-1] = '\0'; 5012974Ssam *q = ','; 5112974Ssam return (czone); 5212974Ssam } 5312974Ssam } 5412974Ssam return(p); 5512974Ssam } 561993Swnj for (zp=zonetab; zp->offset!=-1; zp++) 571993Swnj if (zp->offset==zone) { 581993Swnj if (dst && zp->dlzone) 591993Swnj return(zp->dlzone); 601993Swnj if (!dst && zp->stdzone) 611993Swnj return(zp->stdzone); 621993Swnj } 631993Swnj if (zone<0) { 641993Swnj zone = -zone; 651993Swnj sign = "+"; 661993Swnj } else 671993Swnj sign = "-"; 681993Swnj sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60); 691993Swnj return(czone); 701993Swnj } 71