Question
Hello everyone! Let me first say what a wonderful idea this is. I am 99% done with my company's intranet site (using TWiki of course). The only problem that's preventing me from reaching the 100% goal is the time. I try changing the time variable in
TWikiVariables from GMTIME (General Mountain Time)to ESTIME (Eastern Standard Time) by typing this:
-
- Set %ESTIME{"$day $month, $year - $hour:$min:$sec"}%
I also typed the line above in
TWikiPreferences. However none of this works. At the bottom of the page I still see GMTime. Is there anyone who has done this already? I have not seen any documentation on how to do this and I'm stumped so I figured that someone out there had done this and succeeded. Please help me.
- TWiki version: Dec 2000 with Spring 2001 Beta Update(3/15/01)
- Web server: Apache 1.3.12
- Server OS: Linux (Debian)
--
TWikiGuest - 03 Aug 2001
Answer
Well, first of all GMTIME stands for Greenwich Mean Time, and it is the international standard for global time.
Twiki was designed for international collaboration, so it measures time in a format that everybody can agree on, and no, simple changing the name of a variable will not do it.
If you really want to make this change, unless somebody has done it and can just tell you which lines to patch, you will have to go messing with the twiki code yourself.
This question was previously addressed as
TimeZone.
--
EdgarBrown - 03 Aug 2001
Thank You very much Edgar for your response and thank for the correction on GMT

A question for Peter (or any of the other developers including you Edgar) My company just has one office (at the present at least) so this is the reason I asked this question and the reason for the need for a specifi time zone. I see that there will be a future version that will come out with support for different time zones - when is this scheduled to happen? If its a while from now what would I need to adjust in the actual code to accomplish this?
--
TWikiGuest - 06 Aug 2001
No schedule has been set for supporting different time zones and this has not the highest priority for us because the major users of TWiki are larger organizations with multiple offices.
However you could hack the TWiki source as follows.
Warning: I did not test this code, there is a possibility that it might break something. Changes in
wiki.pm are indicated in
red
# =========================
sub formatGmTime
{
my( $time ) = @_;
my( $sec, $min, $hour, $mday, $mon, $year) = localtime( $time );
my( $tmon) = $isoMonth[$mon];
$year = sprintf( "%.4u", $year + 1900 ); # Y2K fix
$time = sprintf( "%.2u ${tmon} %.2u - %.2u:%.2u", $mday, $year, $hour, $min );
return $time;
}
--
PeterThoeny - 06 Aug 2001
Peter, I've tried this hack; it doesn't seem to do anything for me. -- JonReid - 16 Aug 2001
Jon, I've also tried this which is why I asked the question below. Have you been able to accomplish this since then? I'm not having any luck with it.
--
JessicaOrtiz - 23 Aug 2001
Could this be accomplished using the local time plugin?
--
JessicaOrtiz - 13 Aug 2001
No, the LocalCityTimePlugin allows you to display the local time of a city in a TWiki topic, but it does not change the time stamp display of topics.
--
PeterThoeny - 28 Aug 2001
Thank You Peter, but my original question of changing the time stamp display (I posted as TWikiGuest in the original message) has not yet been addressed. I tried changing the code as you have typed it up above, but it was not working. I understand it has not been tested but did anyone accomplished this?
--
JessicaOrtiz - 29 Aug 2001
Sorry, can't help you out with this one.
--
PeterThoeny - 31 Aug 2001
The code above is not used in displaying revision dates and times (i.e. the date/time at the bottom of the page). You can modify TWiki/Store.pm to display localtime for the revision date - however a quick hack that I tried did not work completely, and broke some other usage (e.g.
WebChanges), so it's not that easy. I can mail you the patch, but it's not working at the moment so you'd need Perl skills to finish it off and fix it.
The simplest solution is to update Store.pm's getRevisionInfoNew routine, so that it doesn't mention the date/time -
WebChanges should still work, but should be tested.
--
RichardDonkin - 01 Sep 2001
can you mail me the patch when you get it to work?
--
JessicaOrtiz - 05 Sep 2001
I won't be doing any more work on this, as I don't really need it and I'm a bit busy... Let me know if you want to start working on it, but finishing it is more like 80% of the work than 20%.
--
RichardDonkin - 06 Sep 2001
Here's a simple hack that will probably do the trick for most people... It relies on your server time being set to the local timezone. You can change the
sprintf statement in Store.pm if you prefer another date format (eg, yyyy mm dd @ hh:mm).
Note: Attachments will still be timestamped in GMT.
Related Link: TopicCreateDateInFormattedSearch
You could change this to read Web or Site preferences to determine if TWiki should use GMTIME or SERVERTIME.
=================================================================
Step 1: Change the code in lib/TWiki/Store.pm
=================================================================
Store.pm
sub getRevisionInfoFromMeta
{
... ...
if( %topicinfo ) {
# Stored as meta data in topic for faster access
$date = TWiki::formatGmTime( $topicinfo{"date"} ); # FIXME deal with changeToIsoDate
# hack for local time - Corey Fruitman 22 Feb 2002
if ( $changeToIsoDate eq "isoLocalTimeFormat") {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime ( $topicinfo{"date"} );
my @monthTranslation= ( "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" );
$year+= 1900;
$mon = $monthTranslation[$mon];
$date = sprintf ("%02d %s %04d - %02d:%02d", $mday, $mon, $year, $hour , $min);
}
# end hack
$author = $topicinfo{"author"};
my $tmp = $topicinfo{"version"};
... ...
}
=================================================================
Step 2: Change code in /bin/view
=================================================================
view
sub main
{
... ...
if( $viewRaw ) {
$text = &TWiki::Store::readTopicRaw( $webName, $topic );
} else {
( $meta, $text ) = &TWiki::Store::readTopic( $webName, topic );
}
# hack for local time - last arg was "isoFormat" - Corey Fruitman 22 Feb 2002
( $revdate, $revuser, $maxrev ) = &TWiki::Store::getRevisionInfoFromMeta( $webName, $topic, $meta, "isoLocalTimeFormat" );
writeDebug( "maxrev = $maxrev" );
if( $rev )
... ...
=================================================================
Step 3: Change the templates
=================================================================
In your
templates directory,
grep " GMT" *
Edit each instance of GMT to represent the desired time zone. (Note the space between the first quote and the 'G' in the grep statement. You don't want to change % GMTIME%!)
Better yet, create a variable for your time zone and use that.
==================================================================
Step 4: Change the executables
==================================================================
In your
bin directory,
grep " GMT" *
Same thing. Edit each instance to represent the desired time zone.
Hope this helps!
--
CoreyFruitman - 22 Feb 2002
Corey in the name of everyone who's been trying to do this,
thank you for the hack above ... it worked!

I set the time to SERVERTIME
and its working just fine.
--
JessicaOrtiz - 25 Feb 2002
Is this working fairly well for people who've applied it? If so, it might be useful to put this into the TWiki code in a more robust form. TWiki is often used by international companies who are OK with GMT, but it seems like a good idea to support a different 'server timezone' than GMT, at least.
Ideally we could do something like
SlashDot, which has a per-user timezone setting allowing display of the local time for each user in whatever timezone - but this would require cookie-based authentication as in
UserCookiePlugin. (Something to think about for the future though.)
--
RichardDonkin - 22 Mar 2002
It has been working perfectly for me since I applied it. The only problem is that TWiki still shows attachments in GMT. Probably a pretty simple fix.
What you're proposing has been touched on in
Codev.TimeFormat. I'll continue this thread there.
--
CoreyFruitman - 22 Mar 2002
I've applied the set of changes outlined by
CoreyFruitman above, in order to have
one time zone, our intranet's local time. I'm very pleased with the results, but there's still one problem. In the output of any simple search, with the default format as shown in
WebChanges, the date field is still GMT times.
Now that I've got my hands dirty and it didn't hurt, could someone point me to the place I'd need to hack to get this column in searches to display in server time too?
--
SueBlake - 07 Aug 2002
I haven't tested this, but you can try adding the following to
lib/TWiki.pm:
sub formatLocalTime
{
my( $theTime ) = @_;
my( $sec, $min, $hour, $mday, $mon, $year ) = localtime( $theTime );
my( $tmon ) = $isoMonth[$mon];
$year = sprintf( "%.4u", $year + 1900 ); # Y2K fix
return sprintf( "%.2u ${tmon} %.2u - %.2u:%.2u", $mday, $year, $hour, $min );
}
... and then change line 77 in the the file
bin/changes
from: $time = &TWiki::formatGmTime( $bar[2] );
to: $time = &TWiki::formatLocalTime( $bar[2] );
--
CoreyFruitman - 12 Aug 2002
Changing status to Answered. If someone tries this, could you please post your results here?
--
CoreyFruitman - 15 Aug 2002
I suspect part of the problem with whether solutions work or not depends on how your server is set-up timewise and on the OS. Our pilot TWiki server (Athens Dec 2001 release) is running under Linux on UK local time but with the hardware clock set to GMT.
I've made the following changes to TWiki:
<snip!>
(Actually the first item of the changes - the "localtime" change described by Peter Thoeny earlier - didn't work correctly and had to be replaced. See the revised solution described below).
--
RichardLewis - 08 Oct 2002
Yes, everything is fine except one: on
WebChanges page I see GMT time for each pages links. But in notification e-mail I receive correct time values for each pages links. What have I missed? Can you advise me?
--
EugeneKuzmitsky - 09 Oct 2002
There was a problem with my earlier proposed patches: Repeated edit/saves in a single edit session added an hour (+ 2 minutes, I believe) each time round. Here's a working solution - at least as of a couple of hours of testing! I've deleted my earlier post and replaced it by this one.
The procedure I described earlier still applies
except for the first item (the "localtime" change to the
formatGmTime sub). This, unfortunately, has far too wide an impact. In its place I've done the following:
- Created a new sub,
formatLocTime, in TWiki.pm identical to formatGmTime except for the one-line change of:
-
my( $sec, $min, $hour, $mday, $mon, $year) = gmtime( $time ); to
-
my( $sec, $min, $hour, $mday, $mon, $year) = localtime( $time );
- The reason for doing this is to apply Peter Thoeny's original change only where needed rather than everywhere
formatGmTime is called.
- Changed
formatGmTime to formatLocTime only in the following Perl scripts/lines:
- bin/changes:
$time = &TWiki::formatGmTime( $bar[2] );
- bin/mailnotify:
$time = &TWiki::formatGmTime( $prevLastmodify );
- bin/mailnotify:
$time = &TWiki::formatGmTime( $bar[2] );
- bin/mailnotify:
$text =~ s/%LASTDATE%/&TWiki::formatGmTime($prevLastmodify)/geo;
- lib/TWiki/Attach.pm:
$attrDate = &TWiki::formatGmTime( $attrDate );
- lib/TWiki/Store.pm:
$date = TWiki::formatGmTime( $topicinfo{"date"} ); # FIXME deal with changeToIsoDate
- Don't change the following line:
- lib/TWiki/Store.pm:
$date = &TWiki::formatGmTime( $epochSec, "rcs" );
Now the changes I discussed earlier:
- In the following files/lines I've removed "GMT" from:
bin/view: my $temp = &TWiki::getRenderedVersion( "r1.$rev - $revdate GMT - $revuser" );
templates/searchbookview.tmpl: <b>Changed:</b> GMT
templates/mailnotify.tmpl: (all lines containing GMT)
- In the following files/lines I've changed "GMTIME" to "SERVERTIME" and removed "GMT":
templates/changes.tmpl: <b>Changed:</b> now %GMTIME{"$hour:$min"}% GMT
templates/search.tmpl: <b>Changed:</b> now %GMTIME{"$hour:$min"}% GMT
templates/searchrenameview.tmpl: <b>Changed:</b> now %GMTIME{"$hour:$min"}% GMT
If you want to show a local time suffix, simply define a variable eg %LOCALTIME%, set it to your local three-letter time zone acronym (eg BST) and insert instead of GMT in the strings above where I've actually removed it. If you have daylight saving time and the acronym changes, as it does here in the UK (ie GMT to/from BST), you'll probably have to use a bit of Perl to check which time acronym to use depending on the difference between SERVERTIME and GMTIME.
--
RichardLewis - 09 Oct 2002
Right. I can now confirm that the above changes work perfectly. Dates are stored as GMT and only converted to local time for display. This avoids any compatibility problems. As far as I can see,
everything is being displayed in local time, inc attachments. What I
can't promise is that this'll work for every platform. This is on a
SuSE Linux/386/Apache implementation, running GMT hardware clock and
GMT0BST1 local time. Windows may react differently.
--
RichardLewis - 11 Oct 2002
Would be nice to get a combination of the Richard Lewis' Date::Calc and Richard Donkin's
UserCookiePlugin solution into
CairoRelease. I'm in a situation where I have two TWiki hosted on the same shared linux hosting server in America. One serves the UK and the other Australia. My localtime is set to US East coast!
--
MartinCleaver - 06 Apr 2003
This sucks. TWiki has options for almost anything but not for this
--
FrankGerhardt - 15 Jul 2003
I agree this issue does need fixing as it's a frequent issue. Authentication of page views is really important for many sites using TWiki, not just for timezone settings.
--
RichardDonkin - 16 Jul 2003
OK guys, how much are you prepared to risk to get this?
There might be an answer if what you want is a single LOCAL time throughout. I've applied Richard Lewis's instructions above to the Feb 2003 release, produced a single patch to do the whole TWiki tree, and I'm currently testing it. So far my
FreeBSD computer hasn't exploded, but YMMV.
Not knowing what to do with an untested patch, I've temporarily attached it to my
SueBlake page. Would one of you other needy people care to try it out and compare notes?
Patch now moved to AlwaysServerTimeZone
Basically you just cd to the directory that contains the main twiki distribution directory (likely /home/httpd or /usr/local/www) and type 'patch < pachfilename' as root. Backup well beforehand, of course.
Maybe it's time to split the several (sometimes conflicting) questions here into separate topics, e.g. my twiki doesn't care about any user's time, nor GMT, just wants the real server time, one timezone only, always, forever, etc, and my users would freak horrendously if they ever glimpsed any other kind of time. Some other twikis need individual users or user groups to be given their own time zones, which is probably more tricky to set up and quite a different question.
--
SueBlake - 16 Jul 2003
Moved patch to
AlwaysServerTimeZone with a plea for testing.
Please go there for followup discussion.
--
SueBlake - 27 Jul 2003
removed math in variables question to the same place since it really is a code suggestion.
--
MattWilkie - 29 Jul 2003