I use the calendar Primefaces component with timeOnly and timeZone attributes for using only hour format (HH:mm). Like this:
<p:calendar id="xabsOvertimeTimeFrom" pattern="HH:mm" timeOnly="true" value="#{data.dateFrom}" timeZone="#{data.timeZone}"/>We can convert the value of #{data.dateFrom} from GMT/UTC time zone to local, conversely, from local time zone to GMT/UTC time zone. Here is my functions:
package vn.nvanhuong.timezoneconverter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class TimeZoneConverter { /** * convert a date with hour format (HH:mm) from local time zone to UTC time zone */ public static Date convertHourToUTCTimeZone(Date inputDate) throws ParseException { if(inputDate == null){ return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(inputDate); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); String dateString = ""+((hours>9)?""+hours:"0"+hours)+":"+((hours>9)?""+minutes:"0"+minutes)+""; SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); return sdf.parse(dateString); } /** * convert a date with hour format (HH:mm) from UTC time zone to local time zone */ public static Date convertHourFromUTCToLocalTimeZone(Date inputDate) throws ParseException { if(inputDate == null){ return null; } Date localFromGmt = new Date(inputDate.getTime() - TimeZone.getDefault().getOffset(inputDate.getTime())); Calendar calendar = Calendar.getInstance(); calendar.setTime(localFromGmt); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); String dateString = ""+((hours>9)?""+hours:"0"+hours)+":"+((hours>9)?""+minutes:"0"+minutes)+""; SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); return sdf.parse(dateString); } }And Unit test for them:
package vn.nvanhuong.timezoneconverter.test; import static org.junit.Assert.assertEquals; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import org.junit.Test; import vn.nvanhuong.timezoneconverter.TimeZoneConverter; public class TimeZoneConverterTest { @Test public void testConvertHourToUTCTimeZoneWhenNull() throws ParseException { Date inputDate = null; Date expected = null; Date actual = TimeZoneConverter.convertHourToUTCTimeZone(inputDate); assertEquals(expected,actual); } @Test public void testConvertHourToUTCTimeZoneWhenNotNull() throws ParseException { SimpleDateFormat isoFormat = new SimpleDateFormat("HH:mm"); Date inputDate = isoFormat.parse("19:21"); isoFormat.setTimeZone(TimeZone.getTimeZone("UTC")); Date expected = isoFormat.parse("19:21"); Date actual = TimeZoneConverter.convertHourToUTCTimeZone(inputDate); assertEquals(expected,actual); } @Test public void testConvertHourToDefaultTimeZoneNull() throws ParseException { Date inputDate = null; Date expected = null; Date actual = TimeZoneConverter.convertHourFromUTCToLocalTimeZone(inputDate); assertEquals(expected,actual); } @Test public void testConvertHourToDefaultTimeZoneNotNull() throws ParseException { SimpleDateFormat isoFormat = new SimpleDateFormat("HH:mm"); Date expected = isoFormat.parse("09:21"); isoFormat.setTimeZone(TimeZone.getTimeZone("UTC")); Date inputDate = isoFormat.parse("09:21"); //16:21 Date actual = TimeZoneConverter.convertHourFromUTCToLocalTimeZone(inputDate); assertEquals(expected, actual); } }
Hope that is useful for everyone! ;)
Comments
Post a Comment