The below code snippet demonstrates the earlier technique i had to use to convert the GMT time into the local time of the user
String timeZone = [select timeZoneSidKey from User where id=:userinfo.getUserId()].timeZoneSidKey; System.debug('TIME ZONE '+timeZone); Datetime dateGMT=Datetime.newInstanceGmt(2013,01,12,01,12,0);//Form the GMT time and date in sfdc String formatteddate=dateGMT.format('yyyy-MM-dd HH:mm:ss',timeZone);//format the GMT into the Local according to his TimeZone Key System.debug('LOCAL TIME ....'+Datetime.valueOfGmt(formatteddate));Debug Log
02:55:43.119 (119313000)|USER_DEBUG|[2]|DEBUG|TIME ZONE America/Los_Angeles 02:55:43.119 (119662000)|VARIABLE_ASSIGNMENT|[3]|dateGMT|"2013-01-12T01:12:00.000Z" 02:55:43.120 (120138000)|USER_DEBUG|[5]|DEBUG|LOCAL TIME ....2013-01-11 17:12:00debug Log analysis
Number of SOQL queries: 1 out of 100 Number of query rows: 1 out of 50000Thanks to the spring 13 apex feature .No more i need query to find the TimeZoneSidKey Here is how i will structure my new code with the help of new time Zone methods
String timeZone = UserInfo.getTimeZone().getID(); System.debug('TIME ZONE'+timeZone); Datetime dateGMT=Datetime.newInstanceGmt(2013,01,12,01,12,0);//Form the GMT time and date in sfdc String formatteddate=dateGMT.format('yyyy-MM-dd HH:mm:ss',timeZone);//format the GMT into the Local according to his TimeZone Key System.debug('LOCAL TIME ....'+Datetime.valueOfGmt(formatteddate));Debug Log
02:55:43.119 (119313000)|USER_DEBUG|[2]|DEBUG|TIME ZONE America/Los_Angeles 02:55:43.119 (119662000)|VARIABLE_ASSIGNMENT|[3]|dateGMT|"2013-01-12T01:12:00.000Z" 02:55:43.120 (120138000)|USER_DEBUG|[5]|DEBUG|LOCAL TIME ....2013-01-11 17:12:00debug Log analysis
Number of SOQL queries: 0 out of 100 Number of query rows: 0 out of 50000So we have saved a query and also a query row using the native userinfo.getTimezone() Method .
Whats more interesting is Timezone system class in apex now is capable of providing accurate offset from GMT .(I may not need to maintain any custom setting to know the offset depending on timezone of the user)
The key points to note are as follows:
1)The negative or positive sign is indicated while returning the integer on userinfo.gettimezone.getOffset(DateTime);
2)The integer is in milliseconds .
References:
1)http://developer.force.com/releases/release/Spring132)Realease Notes Spring 13 Pdf
No comments:
Post a Comment