Managing Timezone Data for Java/PHP App Server
All of the Java and PHP application servers at CloudJiffy are supplied with special timezone packages, which includes data about the history of local time in different locations around the globe and current timezone rules. This information is required for software, running inside the appropriate containers, and is regularly updated within the corresponding server builds in the confines of the newly released CloudJiffy Platform versions.
Besides that, I have the ability to instantly update the timezone rules manually if necessary, or change the currently used TZ, based on the preferred location. So, below we’ll reveal some specifics of the timezone data management at CloudJiffy for the app servers of the abovementioned programming languages:
-
for Java
-
for PHP
Timezone Rules for Java
The timezone rules within Java compute nodes are delivered by means of the dedicated TZdata package, comprised in each appropriate container. Follow the instructions below to:
-
update timezone rules
-
change current timezone
Updating Timezone Rules
Despite the fact the newest TZdata package edition is integrated into a node during its creation, after some time it becomes outdated due to periodical changing of the intrinsic data. Thus, old containers may require the corresponding updating from time to time (particularly, in order not to be recreated each time this is needed). For that, a special embedded TZUpdater tool is used, intended for keeping my timezone data accurate and up-to-date. It is a fairly simple to use and can be run with a single-line command, I just need to:
1. Connect to my Java environment via SSH, e.g. using the embedded Web SSH client:
2. Once inside, I can check the currently used TZdata version by executing the following string:
java -jar /usr/java/utils/tzupdater.jar -V
3. If I’ve observed the corresponding package in the chosen container is outdated, I can update the timezone information using the embedded TZUpdater tool:
java -jar /usr/java/utils/tzupdater.jar -u
As I can see, getting the latest timezone package version for the Java-powered server is a really simple operation with CloudJiffy.
Changing Timezone
Now, let’s discover how to check and change the application server’s local time - we’ll consider this on the example of a Tomcat 9 server.
1. Let’s set the current timestamp to be shown at the server start page - this will help to quickly ensure that new timezone settings have been successfully applied and are relevant for now.
For that, paste the code below instead of the /opt/tomcat/webapps/ROOT/index.jsp file default content (the easiest way is to use the inbuilt CloudJiffy File Manager for that).
?
1 2 3 4 5 6 7 8 9 |
|
2. Save the changes and Open my environment in the browser with the corresponding button to see the current server time, like:
3. In order to change the actual timezone for a particular server, perform the following:
-
for Tomcat, TomEE, Payara, Spring Boot and Jetty
Switch to the variables.conf configuration file and add the -Duser.timezone variable with the required zone as a value, for example:
-Duser.timezone=US/Pacific
Note: Depending on a particular application server used, the location of this file may vary:
-
Tomcat 6, 7, 8, 9, TomEE - /opt/tomcat/conf/variables.conf
-
Jetty 6, 8, 9 - /opt/jetty/etc/variables.conf
-
Payara 4, 5 - /opt/payara/glassfish/domains/domain1/config/variables.conf
-
Spring Boot 1, 2 - /opt/shared/conf/variables.conf
-
for GlassFish
Access the GF admin panel, go to the Configurations > gfcluster-config (or server-config for GF 4) > JVM Settings > JVM Options section and click the Add JVM Option button. Paste the corresponding string (e.g. -Duser.timezone=US/Pacific) within the appeared input field:
-
for WildFly
Switch to the /opt/wildfly/bin/standalone.conf file (or, if a server was scaled horizontally, refer to the /opt/wildfly/bin/domain.conf config) and declare the corresponding variable using the following format:
export JAVA_OPTS="-Duser.timezone=US/Pacific"
4. Save the made adjustment and Restart my application server in order to apply new settings.
Now, just refresh the server start page or click Open in the browser again to see the updated local time:
Great, new rules were applied successfully. In such a way, I can set any desired time location for my server without any problems, in a matter of minutes.
Timezone Rules for PHP
Managing of the timezone settings at CloudJiffy PHP application servers (Apache and NGINX) is performed within the [date] section of the main PHP configuration file - php.ini.
To access it, I need to click the Config button next to the required node. In the opened tab, locate the appropriate file within the file tree (or use the shortcut in the Favorites list to the left) and find the above-mentioned section:
As I can see, this section comprises two options, which can be used to:
-
get the latest timezone data
-
set custom timezone
Updating Timezone Rules
The first setting allows me to use the alternative external timezone database (namely - the Olson one) in case the internal one is outdated.
For that, simply uncomment the appropriate extension through removing the first semicolon symbol, Save the made alteration and Restart my app server.
Now, if I click Open in browser and scroll until the date section of the opened phpinfo() page, I’ll see the latest timezone package version listed, with the denotation the external DB is used:
Changing Timezone
The second option in the [date] section is intended for defining the current timezone location (by default it points to the UTC zone) of a node. For showing this on a real example, we’ll modify the default server’s start page (the /var/www/webroot/ROOT/index.php file) with the following code:
?
1 2 3 |
|
Now, if Saving the updated file and clicking Open in browser, I’ll see the timestamp output:
Return to the CloudJiffy dashboard and specify the desired timezone as a value for the date.timezone parameter within the php.ini file (e.g. Australia/Sydney in our case).
Again, Save my new configurations, Restart the corresponding PHP compute node and refresh the page with current time shown:
That ’s it! As I can see, the timezone was successfully changed and now corresponds to a required location.