Carey Evans wrote:
  >"Oliver Elphick" <olly@lfix.co.uk> writes:
  >
  >> If you have a recent potato system, with timezone files in
  >> /usr/share/zoneinfo, could you please run the script and let me know if
  >> it gives WRONG results for you.  If it does, please tell me your timezone
  >> and offset (date '+%Z %z') and what the date style ought to be. If you
  >> can suggest a change to the script that will get it right without breaking
      > 
  >> results for other countries, that will be even better!
  >
  >Given my normal environment, the script doesn't work out which country 
  >I'm in:
  >
 
Here's a revised version of the script taking into account all comments
so far.

Raul Miller wrote:
  >On Fri, Sep 17, 1999 at 11:20:13PM -0400, Joe Drew wrote:
  >> It's my personal preference that ISO standard be used unless otherwise
  >> told - but that's me.
  >
  >I tend to agree.  It would just be so simple to have the default be ISO.
  >
  >As ISO is very unambiguous, I don't think it would cause problems, either.
  >Then again, maybe someone else knows of problems it would create...

I agree that it would make things simpler, but I doubt that most people
would actually prefer it, because it isn't the way we naturally think of
dates.

Joe Drew wrote:
  >Canada is a very multicultural country, and it really is every
  >person for him- or herself.

That being so, it definitely makes sense to use ISO for Canada.

Of course, the installer can override the guess, but I like to guess as
close as possible.


#! /bin/sh
# Guess the postgresql datestyle to use for a given timezone (from glibc)

# make sure we can find the timezone database
ZONEDIR=`ls -l /etc/localtime | awk '{print $NF}' | cut -d/ -f1-4`
if [ ! -d "$ZONEDIR" ]
then
        echo "Sorry, I don't know where to find the timezone files; this
script expected to find them in $ZONEDIR"
        exit 1
fi

# make sure TZ is set and exported
if [ -z "$TZ" ]
then
        TZ=`ls -l /etc/localtime | awk '{print $NF}' | cut -d/ -f5-10`
fi
export TZ

# find the timezone offset from UTC
tzno=`date '+%z'`

# Find the name of the zone - strip off unwanted header directories
x=`echo $TZ | cut -d/ -f1`
case $x in ( SystemV | posix | right )
        x=`echo $TZ | cut -d/ -f2-4`
        ;;
        * )
                x=$TZ
                ;;
esac

# What country does this zone belong to (if undefined, set it to __)
tzcountry=`grep $x $ZONEDIR/zone.tab | head -1 | cut -c1-2` 
if [ -z "$tzcountry" ]
then
        tzcountry=__
fi

# Guess the timezone
case $tzcountry in ( US )
                # US date format
                GuessDateStyle=US
                ;;
        AR )
                # Argentina
                GuessDateStyle=SQL
                ;;
        CA )
                # Canada has no standard
                GuessDateStyle=ISO
                ;;
        DE )
                # Germany has a style to itself
                GuessDateStyle=GERMAN
                ;;
        __ )
                # No country, so see if the zone is a region or country name
                x=$TZ
                while echo $x | grep -q /
                do
                        y=`dirname $x`
                        case $y in ( SystemV | posix | right )
                                y=`basename $x`
                                ;;
                        esac
                        x=$y
                done

                case $x in ( Africa | Canada | Indian | Mexico | America | 
Chile | GB | Iran | Mideast | Antarctica | Cuba | Israel | NZ | Singapore | 
Arctic | Jamaica | Asia | Japan | Navajo | Turkey | Atlantic | Kwajalein | 
Australia | Egypt | Libya | US | Brazil | Eire | Pacific | Hongkong | Poland | 
Europe | Iceland | Portugal)
                        # try to guess the zone from the UTC offset and the
                        # zone abbreviation
                        if [ -z "$GuessDateStyle" ]
                        then
                                GuessDateStyle=EURO
                                if [ "$LANG" = de_DE ]
                                then
                                        GuessDateStyle=GERMAN
                                elif [ $tzno -le -200 -a $tzno -gt -1200 ]
                                then
                                        tzn=`date '+%Z'`
                                        case $tzn in ( ADT | AST | AKDT | AKST 
| CDT | CST | EDT | EST | HADT | HAST | HST | MDT | MST | NDT | PDT | PST)
                                                GuessDateStyle=US
                                                ;;
                                        esac
                                fi
                        fi
                        ;;
                * )
                        # Not a country or region so use ISO
                        GuessDateStyle=ISO
                        ;;
                esac
                ;;
        * )
                # The rest of the world uses normal European format
                GuessDateStyle=EURO
                ;;
esac
echo $tzcountry $GuessDateStyle

      Vote against SPAM: http://www.politik-digital.de/spam/
                 ========================================
Oliver Elphick                                [EMAIL PROTECTED]
Isle of Wight                              http://www.lfix.co.uk/oliver
               PGP key from public servers; key ID 32B8FAA1
                 ========================================
     "Give, and it shall be given unto you; good measure, 
      pressed down, and shaken together, and running over, 
      shall men pour into your lap. For by your standard of 
      measure it will be measured to in return."
                                           Luke 6:38 

Reply via email to