<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
          
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->


<!-- Content Stylesheet for Site -->

        
<!-- start the processing -->
    <!-- ====================================================================== -->
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
    <!-- Main Page Section -->
    <!-- ====================================================================== -->
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

                                                    <meta name="author" content="
			OpenMeetings Team
		">
            <meta name="email" content="sebawagner@apache.org">
            
           
                                    
                        
            <title>Apache OpenMeetings - Timezones</title>
            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
            
			<!-- Add jQuery library -->
			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
		
			<!-- Add coinslider plugins -->
			<script type="text/javascript" src="js/coin-slider.min.js"></script>
			
			<!-- Add colorbox plugin -->
			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
		
			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
			
			<script type="text/javascript">
				$(function() {
					$("#accordion").accordion({
						heightStyle: 'content',
						icons: false
					});
					var idx = location.href.lastIndexOf('/');
					if (idx > -1) {
						var url = '.' + location.href.substring(idx);
						var a = $('#accordion a[href="' + url + '"]');
						a.addClass('active');
						var id = a.parent()[0].id;
						var idx1 = id.lastIndexOf('-');
						if (idx1 > -1) {
							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
						} 
					}
					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
				});
			</script>
			
			<style type="text/css">
				.fancybox-custom .fancybox-outer {
					box-shadow: 0 0 50px #222;
				}
			</style>
        </head>

        <body bgcolor="#ffffff" text="#000000" link="#123465" vlink="#123465" alink="#000000">  
        	<div class="mainbody" style="min-width: 960px; width: 94%;">
        	<div class="superbody" style="width: 100%;">
            <table border="0" width="100%" cellspacing="0">
                <!-- TOP IMAGE -->
                <tr>
                    <td align="left">
<a href="http://openmeetings.apache.org/"><img src="./images/logo-2.jpg" alt="Apache OpenMeetings" border="0"/></a>
</td>
                    <td width="80%" align="right" valign="top" >
	<a href="demo.html">Demo</a>
	<span>|</span> 
	<a href="downloads.html" target="_PARENT">Download</a>
	<span>|</span> 
	<a href="installation.html" target="_PARENT">Installation</a>
	<span>|</span> 
	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
	<span>&nbsp;</span>
</td>
                </tr>
            </table>
            <table border="0" width="100%" cellspacing="4">
                <tr><td colspan="2">
                    <hr noshade="noshade" size="1"/>
                </td></tr>

                <tr>
                    <!-- LEFT SIDE NAVIGATION -->
                    <td width="20%" valign="top" nowrap="nowrap">

                    <!-- special ACon Logo - leave here for next time
                    <a href="http://apachecon.com/2005/US/">
                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
                             width="125" border="0" alt="ApacheCon US 2005" />
                    </a>  -->

                   <!-- regular menu -->

                    
    <!-- ============================================================ -->
    <div id="accordion" style="width: 100%">
    
            	<h3><a href="#General">General</a></h3>
    	<div>
	        	            	            	    <a href="./index.html">Home</a>
<br/>
	        		        	            	            	    <a href="./license.html">License</a>
<br/>
	        		        	            	            	    <a href="http://www.apache.org/">ASF</a>
<br/>
	        		        	            	            	    <a href="./downloads.html">Downloads</a>
<br/>
	        		        	            	            	    <a href="./commercial-support.html">Commercial Support</a>
<br/>
	        		            	</div>
        	<h3><a href="#InstallationandUpgrade">Installation and Upgrade</a></h3>
    	<div>
	        	            	            	    <a href="./installation.html">Installation</a>
<br/>
	        		        	            	            	    <a href="./Upgrade.html">Upgrade</a>
<br/>
	        		        	            	            	    <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Tutorials</a>
<br/>
	        		        	            	            	    <a href="./CommandLineAdmin.html">Command Line Admin</a>
<br/>
	        		            	</div>
        	<h3><a href="#Community">Community</a></h3>
    	<div>
	        	            	            	    <a href="./get-involved.html">Get Involved</a>
<br/>
	        		        	            	            	    <a href="./team-list.html">Committers</a>
<br/>
	        		        	            	            	    <a href="./mail-lists.html">Mailing Lists</a>
<br/>
	        		        	            	            	    <a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/">Wiki</a>
<br/>
	        		            	</div>
        	<h3><a href="#Development">Development</a></h3>
    	<div>
	        	            	            	    <a href="./svn.html">Source Code</a>
<br/>
	        		        	            	            	    <a href="http://issues.apache.org/jira/browse/OPENMEETINGS">Bugs / Issues (JIRA)</a>
<br/>
	        		        	            	            	    <a href="./dependencies.html">Dependencies</a>
<br/>
	        		        	            	            	    <a href="./BuildInstructions.html">Build Instructions</a>
<br/>
	        		        	            	            	    <a href="./JUnitTesting.html">JUnit Testing</a>
<br/>
	        		        	            	            	    <a href="./ManualTesting.html">Manual Testing</a>
<br/>
	        		        	            	            	    <a href="./ReleaseGuide.html">Release Guide</a>
<br/>
	        		        	            	            	    <a href="./WebsiteGuide.html">Website Guide</a>
<br/>
	        		            	</div>
        	<h3><a href="#Integration">Integration</a></h3>
    	<div>
	        	            	            	    <a href="./SoapRestAPI.html">SOAP/REST API</a>
<br/>
	        		        	            	            	    <a href="./RestAPISample.html">REST API Sample</a>
<br/>
	        		        	            	            	    <a href="./LdapAndADS.html">Ldap and ADS</a>
<br/>
	        		        	            	            	    <a href="./oauth2.html">OAuth2</a>
<br/>
	        		        	            	            	    <a href="./voip-sip-integration.html">VoIP and SIP</a>
<br/>
	        		        	            	            	    <a href="./ErrorsTable.html">Errors table</a>
<br/>
	        		            	</div>
        	<h3><a href="#Plugins">Plugins</a></h3>
    	<div>
	        	            	            	    <a href="./MoodlePlugin.html">Moodle Plugin</a>
<br/>
	        		        	            	            	    <a href="./SakaiPlugin.html">Sakai Plugin</a>
<br/>
	        		        	            	            	    <a href="./JiraPlugin.html">Jira Plugin</a>
<br/>
	        		        	            	            	    <a href="./JoomlaPlugin.html">Joomla Plugin</a>
<br/>
	        		        	            	            	    <a href="./DrupalPlugin.html">Drupal Plugin</a>
<br/>
	        		        	            	            	    <a href="./BitrixPlugin.html">Bitrix Plugin</a>
<br/>
	        		        	            	            	    <a href="./ConfluencePlugin.html">Confluence Plugin</a>
<br/>
	        		        	            	            	    <a href="./SugarCRMPlugin.html">SugarCRM Plugin</a>
<br/>
	        		        	            	            	    <a href="./RedminePlugin.html">Redmine Plugin</a>
<br/>
	        		            	</div>
        	<h3><a href="#Configuration">Configuration</a></h3>
    	<div>
	        	            	            	<b>DB Sample Configurations</b><br/>
	            			            			    <a href="./ApacheDerbyConfig.html">Apache Derby</a>
<br/>
	            			            			    <a href="./IBMDB2Config.html">IBM DB2</a>
<br/>
	            			            			    <a href="./OracleConfig.html">Oracle</a>
<br/>
	            			            			    <a href="./MySQLConfig.html">MySQL</a>
<br/>
	            			            			    <a href="./PostgresConfig.html">Postgres</a>
<br/>
	            			            			    <a href="./MSSQLConfig.html">MSSQL</a>
<br/>
	            			        		        	            	            	<b>Localization and languages</b><br/>
	            			            			    <a href="./Internationalisation.html">Internationalisation</a>
<br/>
	            			            			    <a href="./LanguageEditor.html">LanguageEditor</a>
<br/>
	            			            			    <a href="./TimeZoneHandling.html">TimeZoneHandling</a>
<br/>
	            			            			    <a href="./EditTemplates.html">EditTemplates</a>
<br/>
	            			        		        	            	            	<b>NAT Port Settings</b><br/>
	            			            			    <a href="./PortSettings.html">Port settings</a>
<br/>
	            			        		        	            	            	<b>Performance</b><br/>
	            			            			    <a href="./JVMPerformanceTuning.html">JVM performance tuning</a>
<br/>
	            			        		        	            	            	<b>User Interface</b><br/>
	            			            			    <a href="./themes-and-branding.html">Themes</a>
<br/>
	            			            			    <a href="./Dashboard.html">Dashboard</a>
<br/>
	            			            			    <a href="./WebcamResolutions.html">Webcam resolutions</a>
<br/>
	            			            			    <a href="./ConferenceRoomLayoutOptions.html">Room layout options</a>
<br/>
	            			            			    <a href="./HotKeys.html">Hot Keys</a>
<br/>
	            			        		        	            	            	<b>Customization</b><br/>
	            			            			    <a href="./WebappNamePath.html">Webapp name/path</a>
<br/>
	            			            			    <a href="./Navigation.html">Navigation</a>
<br/>
	            			            			    <a href="./CalendarAndTimezone.html">Calendar and timezone</a>
<br/>
	            			            			    <a href="./CustomRoomTypeHowTo.html">Custom room type</a>
<br/>
	            			            			    <a href="./CustomCryptMechanism.html">Custom ctypt mechanism</a>
<br/>
	            			            			    <a href="./GeneralConfiguration.html">General Configuration</a>
<br/>
	            			        		        	            	            	<b>Security</b><br/>
	            			            			    <a href="./RestrictedAccess.html">Restricted Access</a>
<br/>
	            			            			    <a href="./RTMPSAndHTTPS.html">RTMPS and HTTPS</a>
<br/>
	            			        		        	            	            	<b>Converters</b><br/>
	            			            			    <a href="./OpenOfficeConverter.html">OpenOffice Converter</a>
<br/>
	            			            			    <a href="./FFMPEGVersionSwitch.html">FFMPEG Version Switch</a>
<br/>
	            			        		        	            	            	<b>Clustering</b><br/>
	            			            			    <a href="./Clustering.html">Clustering</a>
<br/>
	            			        		        	            	            	<b>Misc</b><br/>
	            			            			    <a href="./GetVersionInfo.html">Get version info</a>
<br/>
	            			        		            	</div>
        
    </div>
     
    <br/>
    
                    </td>
                    <td width="80%" align="left" valign="top">
                                                                    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
      <tr><td ><!-- bgcolor="#EEEEEE" -->
        <font color="#000000" face="verdana,arial,helvetica,sanserif">
          <a name="Introduction"><strong>Introduction</strong></a>
        </font>
        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
      </td></tr>
      <tr><td>
        <blockquote>
                                    <p>
				List of default Timezones:
				<a href="http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml" rel="nofollow">http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml
				</a>
			</p>
                                                <p>
				To add a new Time Zone you have to lookup its represant in Java's
				Timezone registry. You can then add freely new time zones to the XML
				file. The XML entries are imported into the database into the table
				<strong>om_timezone</strong>
				during the installation of OpenMeetings. (Don't forget to stop the
				server before you change anything in the database).
			</p>
                                                <p>
				The Servers default timezone is stored in the configuration table in
				the attribute
				<strong>default.timezone</strong>
				. The name in this value links to an attribute in the table
				om_timezone in the column
				<strong>jname</strong>
				.
			</p>
                                                <p>
				You can set a Flag
				<strong>forceTimeZoneCheck</strong>
				for each user that gives him a Pop-Up notification to change his
				time zone. The Flag can be changed in the user administration of
				OpenMeetings. This can be handy if you update from a previous
				version of OpenMeetings to make sure users see the new feature and
				update their settings.
			</p>
                            </blockquote>
      </td></tr>
      <tr><td><br/></td></tr>
    </table>
                                                <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
      <tr><td ><!-- bgcolor="#EEEEEE" -->
        <font color="#000000" face="verdana,arial,helvetica,sanserif">
          <a name="How to lookup timezone's"><strong>How to lookup timezone's</strong></a>
        </font>
        <hr style="width:100%; color:#999999; background-color:#999999; height:1px; border:0px;"/>
      </td></tr>
      <tr><td>
        <blockquote>
                                    <div class="xmlcode">
		  
                    String[] ids = TimeZone.getAvailableIDs();<br />
                    for (String id : ids) {<br />
                        
                        <div style="margin-left:20px">
                        TimeZone timeZone = TimeZone.getTimeZone(id);<br />
                        //TimeZone timeZone = timeRegistry.getTimeZone(id);<br />
                        <br />
                        Calendar cal = Calendar.getInstance();<br />
                                <div style="margin-left:20px">
                                cal.setTimeZone(timeZone);<br />
                                // + cal.get(Calendar.DST_OFFSET)<br />
                                int offset = cal.get(Calendar.ZONE_OFFSET);<br />
                        <br />
                                int offsetInMinutes = offset/1000/60;<br />
                                <br />
                                System.out.println("name" + id + "name offset "+offsetInMinutes+"offset ");
                                </div>
                        </div>
                    }
		  
		  </div>
                            </blockquote>
      </td></tr>
      <tr><td><br/></td></tr>
    </table>
                                        </td>
                </tr>

                <!-- FOOTER -->
                <tr><td colspan="2">
                    <hr noshade="noshade" size="1"/>
                </td></tr>
                <tr><td colspan="2">
                    <div align="center"><font color="#123465" size="-1"><em>
                    Copyright &#169; 2003-2014, The Apache Software Foundation
                    </em></font></div>
                </td></tr>
            </table>
            </div>
            </div>
        </body>
    </html>
<!-- end the processing -->






















