[wplug] Daylight Saving Time

Lance Tost ltost at pobox.com
Fri Mar 14 10:54:33 EST 2003


Why not just set the timezone on your linux box to EST5EDT or
"American/New_York"?  My /etc/localtime is a symlink to the New_York file:

[root at pluto sysconfig]# ls -l /etc/localtime
lrwxrwxrwx    1 root     root           36 Feb 18 09:56 /etc/localtime ->
/usr/share/zoneinfo/America/New_York

Although you could also link it to /usr/share/zoneinfo/EST5EDT.

The above is for RedHat... not sure if the other distros do it the same
way.  At worst, you could set TZ=EST5EDT in /etc/profile or something.

I think it may all be irrelevant anyway since Linux stores time internally
as the number of seconds since Jan 1st (or is it 31st), 1970...



On Fri, 14 Mar 2003, Robert Supansic wrote:

> Date: Fri, 14 Mar 2003 10:40:48 -0500
> From: Robert Supansic <rsupansic at libcom.com>
> Reply-To: wplug at wplug.org
> To: WPLUG <wplug at wplug.org>
> Subject: [wplug] Daylight Saving Time
>
> Several months ago, I raised a question at a Users' meeting about automatically adjusting
> for Daylight Saving Time (DST).  Here's the problem:
>
> 1.  Linux computers are generally set to Coordinated Universal Time (UTC, formerly
> Greenwich Mean Time or Zulu Time).   Under UTC, Linux computers automatically adjust for
> Daylight Saving Time.
>
> 2.  Windows computers run on local time, e.g. Eastern Standard Time, Pacific Standard
> Time, etc..  Under local time, Windows computers also automatically adjust for Daylight
> Saving Time.
>
> 3.  When running a Linux fileserver with Windows clients, the fileserver should be set to local
> time to avoid giving the Windows clients indigestion; however,  this disables the automatic
> updating of DST under Linux.  If the fileserver also synchronizes the system clock on the
> clients, this effectively disables the automatic DST updating on the clients as well.
>
> The following script program fixes the problem, I think.  It is designed to run on any reboot
> and on Saturdays in April and October.
>
> It is less simple than I would like.  It requires a small file in /etc to record the last timezone
> setting.  This is because I know of no way to change the timezone string which is output by
> the "date" command.  (If anyone does, I would appreciate the information.)
>
> The script follows:
>
> #!   /bin/bash
>
> #    /sbin/init.d/DST: automatically sets system clock back/forward one
> #                                     hour for Daylight Saving Time on Linux computers
> #                                     set to local time rather than UTC.
> #                                     Called from crontab and on bootup.
>
> #    Usage: /sbin/init.d/DST
>
> #    03/05/2003 by Bob Supansic / RK Associates
>
> #    Distributions vary in the handling of the boot sequence.  SuSE
> #    uses the directory /sbin/init.d.  To execute this program on bootup,
> #    it should be called from /sbin/init.d/boot.local.
>
> #    In the Eastern Time Zone of the US, Daylight Saving Time begins
> #    at 2:00 am on the first Saturday in April and ends at 2:00 am on
> #    the last Saturday in October.  In /etc/crontab, the program should
> #    therfore run at 2:00 on every Saturday in April and October:
>
> #    0 2 0   4  6   /sbin/init.d/DST
> #    0 2 0 10  6   /sbin/init.d/DST
>
> #    (In Europe, Summer Time begins at 1 am on the last Sunday in
> #    March and ends at 1 am on the last Sunday in October.  Reprogram
> #    accordingly.)
>
>
> THIS_MONTH="$( date +%-m )"                       		# Month number of today
> THIS_YEAR=$( date +%-Y )                          		# Year for cal command
> TODAYS_DAY="$( date +%-d | tr -d " " )"           		# Day number of today
> TZ_IS="EST"                                       			# Today's timezone; EST=default
>
> if [ ! -f /etc/CurrentTZ ]                        			# Use this file to store
> then                                              				# previous TZ setting.
>         echo EST > /etc/CurrentTZ
> fi
> TZ_WAS="$( cat /etc/CurrentTZ )"                  		# Previous time zone setting
>
> #    If necessary, reset the time zone to Eastern Daylight Time (EDT).
>
> if [ "$THIS_MONTH" -gt 4 -a "$THIS_MONTH" -lt 10 ]
> then
>         TZ_IS="EDT"
> fi
> if [ "$THIS_MONTH" -eq 4 ]
> then
>          DST_START=$( cal $THIS_MONTH $THIS_YEAR | tail +3 | head -n1 | \
>         cut -b18- | tr -d " " )
>
>         if [ "$TODAYS_DAY" -ge "$DST_START" ]
>         then
>                  TZ_IS="EDT"
>         fi
> fi
> if [ "$THIS_MONTH" -eq 10 ]
> then
>
>          DST_END=$( cal $THIS_MONTH $THIS_YEAR | tail +3 | tail -2 | cut -b18- | tr -d " " )
>
> #      If there is no Saturday in the last week of October, get the Saturday
> #      of the next-to-last week.
>
>          if [ -z "$DST_END" ]
>         then
>                  DST_END=$( cal $THIS_MONTH $THIS_YEAR | tail +3 | tail -3 | head -n1 | \
>                  cut -b18- | tr -d " " )
>          fi
>          if [ "$TODAYS_DAY" -lt "$DST_END" ]
>          then
>                   TZ_IS="EDT"
>          fi
> fi
>
> #    For testing/debugging, change -s below to -d
>
> if [ "$TZ_WAS" == "EST" -a "$TZ_IS" == "EDT" ]
> then
>          date -s "-1 hour"
> fi
> if [ "$TZ_WAS" == "EDT" -a "$TZ_IS" == "EST" ]
> then
>          date -s "+1 hour"
> fi
>
>
>
>
> ----------------
> [Virus Scanned by Libcom]
> [Libcom: The only true $9.95 Unlimited Service in Pittsburgh]
>
> _______________________________________________
> wplug mailing list
> wplug at wplug.org
> http://www.wplug.org/mailman/listinfo/wplug
>
> ----------------
> [Virus Scanned by Libcom]
> [Libcom: The only true $9.95 Unlimited Service in Pittsburgh]
>
>
>

-- 
Lance Tost <ltost at pobox.com>




More information about the wplug mailing list