SeamFramework.orgCommunity Documentation

Chapter 18. Timezones

18.1. Default TimeZone
18.2. User TimeZone
18.3. Available TimeZones

To support a more developer friendly way of handling TimeZones we have incorporated the use of Joda-Time through their DateTimeZone class. Don't worry, it provides convenience methods to convert to JDK TimeZone if required.

Starting at the application level the module provides a DateTimeZone that can be retrieved with

@Inject

DateTimeZone applicationTimeZone;

It can also be accessed through EL by the name "defaultTimeZone"!

By default the TimeZone will be set to the JVM default, unless you override the DefaultTimeZoneProducer Bean using the Seam Config module. For instance, adding this XML into seam-beans.xml or beans.xml will change the default TimeZone of the application to be Tijuana!


<beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:s="urn:java:seam:core" 
   xmlns:tz="urn:java:org.jboss.seam.international.timezone"
   xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee 
      http://docs.jboss.org/cdi/beans_1_0.xsd">

    <tz:DefaultTimeZoneProducer>
        <s:specializes/>
        <tz:defaultTimeZoneId>America/Tijuana</tz:defaultTimeZoneId>
    </tz:DefaultTimeZoneProducer>
</beans>

We also have a DateTimeZone that is scoped to the User Session which can be retrieved with

@Inject

@UserTimeZone
DateTimeZone userTimeZone;

It can also be accessed through EL using "userTimeZone".

By default the TimeZone will be the same as the application when the User Session is initialised. However, changing the User's TimeZone is a simple matter of firing an event to update it. An example would be

@Inject

@Changed
Event<DateTimeZone> tzEvent;
 
public void setUserTimeZone()
{
     DateTimeZone tijuana = DateTimeZone.forID("America/Tijuana");
     tzEvent.fire(tijuana);
}

We've also provided a list of available TimeZones that can be accessed via

@Inject

List<DateTimeZone> timeZones;