1: /* 2: * Copyright (c) 1980 Regents of the University of California. 3: * All rights reserved. The Berkeley software License Agreement 4: * specifies the terms and conditions for redistribution. 5: */ 6: 7: #if defined(LIBC_SCCS) && !defined(lint) 8: static char sccsid[] = "@(#)timezone.c 5.2 (Berkeley) 3/9/86"; 9: #endif LIBC_SCCS and not lint 10: 11: /* 12: * The arguments are the number of minutes of time 13: * you are westward from Greenwich and whether DST is in effect. 14: * It returns a string 15: * giving the name of the local timezone. 16: * 17: * Sorry, I don't know all the names. 18: */ 19: 20: static struct zone { 21: int offset; 22: char *stdzone; 23: char *dlzone; 24: } zonetab[] = { 25: -1*60, "MET", "MET DST", /* Middle European */ 26: -2*60, "EET", "EET DST", /* Eastern European */ 27: 4*60, "AST", "ADT", /* Atlantic */ 28: 5*60, "EST", "EDT", /* Eastern */ 29: 6*60, "CST", "CDT", /* Central */ 30: 7*60, "MST", "MDT", /* Mountain */ 31: 8*60, "PST", "PDT", /* Pacific */ 32: #ifdef notdef 33: /* there's no way to distinguish this from WET */ 34: 0, "GMT", 0, /* Greenwich */ 35: #endif 36: 0*60, "WET", "WET DST", /* Western European */ 37: -10*60, "EST", "EST", /* Aust: Eastern */ 38: -10*60+30, "CST", "CST", /* Aust: Central */ 39: -8*60, "WST", 0, /* Aust: Western */ 40: -1 41: }; 42: 43: char *timezone(zone, dst) 44: { 45: register struct zone *zp; 46: static char czone[10]; 47: char *sign; 48: register char *p, *q; 49: char *getenv(), *index(); 50: 51: if (p = getenv("TZNAME")) { 52: if (q = index(p, ',')) { 53: if (dst) 54: return(++q); 55: else { 56: *q = '\0'; 57: strncpy(czone, p, sizeof(czone)-1); 58: czone[sizeof(czone)-1] = '\0'; 59: *q = ','; 60: return (czone); 61: } 62: } 63: return(p); 64: } 65: for (zp=zonetab; zp->offset!=-1; zp++) 66: if (zp->offset==zone) { 67: if (dst && zp->dlzone) 68: return(zp->dlzone); 69: if (!dst && zp->stdzone) 70: return(zp->stdzone); 71: } 72: if (zone<0) { 73: zone = -zone; 74: sign = "+"; 75: } else 76: sign = "-"; 77: sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60); 78: return(czone); 79: }