/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 1986 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" /* from UCB 4.4 83/09/25 */ /* * The arguments are the number of minutes of time * you are westward from Greenwich and whether DST is in effect. * It returns 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[] = { -12*60, "NZST", "NZDT", /* New Zealand */ -10*60, "EST", "EST", /* Aust: Eastern */ -10*60+30, "CST", "CST", /* Aust: Central */ -8*60, "WST", 0, /* Aust: Western */ -9*60, "JST", 0, /* Japanese */ 0*60, "GMT", "BST", /* Great Britain and Eire */ -1*60, "MET", "MET DST", /* Middle European */ -2*60, "EET", "EET DST", /* Eastern European */ 3*60+30, "NST", "NDT", /* Newfoundland */ 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 */ 9*60, "YST", "YDT", /* Yukon */ 10*60, "HST", "HDT", /* Hawaiian */ -1 }; char *timezone(zone, dst) { register struct zone *zp; static char czone[10]; char *sign; register char *p, *q; char *getenv(), *index(); if (p = getenv("TZNAME")) { if (q = index(p, ',')) { if (dst) return(++q); else { *q = '\0'; strncpy(czone, p, sizeof(czone)-1); czone[sizeof(czone)-1] = '\0'; *q = ','; return (czone); } } return(p); } 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); } if (zone<0) { zone = -zone; sign = "+"; } else sign = "-"; sprintf(czone, "GMT%s%d:%02d", sign, zone/60, zone%60); return(czone); }