[rt-users] Timezone Help Needed

Bruce Campbell bruce_campbell at ripe.net
Thu Nov 28 08:23:00 EST 2002


On Thu, 28 Nov 2002, Greg Elisara wrote:

> I'm getting weird timestamps in rt2 (running on Linux RH8). I'm in Auckland,
> New Zealand (GMT +12). I have set the timezone setting in config.pm to
> 'NZDT', which I believe linux understands (at least "date" returns in NZDT,
> eg Tue Nov 26 09:43:12 NZDT 2002) but in RT the timestamp seems to be for
> GMT.

You're referring to things like the Search page displaying dates in GMT
(eg:  Search Criteria ... Created > 2002-07-31 22:00:00 GMT), yes?

RT will always _store_ dates in GMT/UTC format, and you really don't want
to change the _storage_ of the dates.

However, the _presentation_ of the dates during a search, thats another
matter.  The RT::Date->AsString() method returns dates in the local
timezone, so we could change the descriptive text for the search criteria.

After a little poking around, we see that /Search/Listing.html relies on
RT::Tickets->DescribeRestrictions().  Another bit of poking around shows
that this is the only reference to the call, and the text stored in the
RT::Tickets object is used only by humans.

So, lets look at where that field is set.  Obviously, its in
RT::Tickets->LimitDate, where we see that we're setting the DESCRIPTION
manually, ie:

    unless ($args{'DESCRIPTION'} ) {
        $args{'DESCRIPTION'} = $args{'FIELD'} . " " .$args{'OPERATOR'}. " ". $args{'VALUE'} . " GMT"
    }

Note the GMT on the end.  What we want to do is to show the date in the
local timezone.  Since RT has a nice RT::Date object that we can use, we
don't need to do date manipulations ourselves:

    unless ($args{'DESCRIPTION'} ) {
	# Create a RT::Date object.
        my $tdate = RT::Date->new( $RT::SystemUser );

	# Set it to the specific time.
        $tdate->Set(    Format => 'ISO',
                        Value => $args{'VALUE'} );

	# The old line commented out.
        # $args{'DESCRIPTION'} = $args{'FIELD'} . " " .$args{'OPERATOR'}. " ". $args{'VALUE'} . " GMT"

        # If we use AsString, we get it in the localtimezone.
        $args{'DESCRIPTION'} = $args{'FIELD'} . " " .$args{'OPERATOR'}. " ". $tdate->AsString() . " " . $tdate->LocalTimezone();
    }

Note that you _will_ need to set $Timezone in etc/config.pm to be
something that your machine recognises.  After editing it, you will need
to stop and then start your apache instance to flush the mod_perl cache
and have changes be visible.

Regards,

-- 
                             Bruce Campbell                            RIPE
                   Systems/Network Engineer                             NCC
                 www.ripe.net - PGP562C8B1B             Operations/Security




More information about the rt-users mailing list