[
https://issues.apache.org/jira/browse/TRINIDAD-1512?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12733899#action_12733899
]
Yee-Wah Lee commented on TRINIDAD-1512:
---------------------------------------
Sent an email out to dev mailing list, discussing if this is a JDK issue.
Excerpting the relevant code here:
1) DateTimeConverter.java#getFormattingTimeZone(TimeZone tZone)
This effectively creates a timezone with customized id. TimeZone zone =
(TimeZone) tZone.clone();
// set the id as "GMT Sign Hours : Minutes"
StringBuilder zoneId = new StringBuilder(9);
int rawOffset = zone.getRawOffset();
.. code to calculate and append GMT ± hours:mins
zone.setID(zoneId.toString());
return zone;
2) JDK 1.5: SimpleDateFormat#subFormat()
The 1.5 format code would look up a zone info file using the date's offset and
daylight savings.
case 17: // 'z' - ZONE_OFFSET
int zoneIndex =
formatData.getZoneIndex(calendar.getTimeZone().getID());
if (zoneIndex == -1) {
value = calendar.get(Calendar.ZONE_OFFSET) +
calendar.get(Calendar.DST_OFFSET);
buffer.append(ZoneInfoFile.toCustomID(value));
<---------Uses this code path
}....
3) JDK 6: SimpleDateFormat#subFormat()
The 1.6 code now checks the DateFormatSymbols.locale and isZoneStringsSet(). By
default, the locale would be null and zoneStringsSet = false unless user
overrides either.It then calls TimeZone.getDisplayName() instead of checking
the zoneInfoFile.
case 17: // 'z' - ZONE_OFFSET
if (formatData.locale == null || formatData.isZoneStringsSet) {
..
// same as 1.5, looks up zone info file
String[][] zoneStrings = formatData.getZoneStringsWrapper();
buffer.append(zoneStrings[zoneIndex][index]);
} else {
TimeZone tz = calendar.getTimeZone();
boolean daylight = (calendar.get(Calendar.DST_OFFSET) != 0);
int tzstyle = (count < 4 ? TimeZone.SHORT : TimeZone.LONG);
buffer.append(tz.getDisplayName(daylight, tzstyle,
formatData.locale)); <------------ Uses this code path
}...
4) JDK 1.5/6: TimeZone.getDisplayName()
This method is the same in both JDKs, but only called in JDK 6 case. If the ID
is customized (GMT ±x), it simply returns that.
String id = getID();
String[] names = getDisplayNames(id, locale);
if (names == null) {
if (id.startsWith("GMT")) {
char sign = id.charAt(3);
if (sign == '+' || sign == '-') {
return id;
Therefore, the display name for the Converter's timezone in JDK 6 is fixed as
its ID (GMT+/-rawOffset).
> ConvertDateTime uses static GMT+x string for timezone display, doesn't update
> for daylight savings
> --------------------------------------------------------------------------------------------------
>
> Key: TRINIDAD-1512
> URL: https://issues.apache.org/jira/browse/TRINIDAD-1512
> Project: MyFaces Trinidad
> Issue Type: Bug
> Components: Components
> Affects Versions: 1.2.11-core
> Reporter: Yee-Wah Lee
> Priority: Minor
>
> 1. Create a jsp that uses tr:convertDateTime to display timezone, e.g.
> <af:outputText value="#{demoInput.date}">
> <af:convertDateTime type="both" timeStyle="full"
> timeZone="America/New_York"/>
> </af:outputText>
> where demoInput.date returns the current date, e.g. June 17 09, 1:00 PM
> 2. Run the jsp. For June 17 09 the timezone is actually EDT (GMT - 4).
> Instead it displays as EST
> 6/17/2009 1:00:00 PM GMT-05:00
> If using the JSF standard DateTimeConverter, the output is:
> Jun 17, 2009 1:00:00 PM EDT
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.