You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Vitali Sidaruk (JIRA)" <ji...@apache.org> on 2019/04/03 09:48:02 UTC
[jira] [Created] (DIRAPI-336) GeneralizedTime issue with timezone
when DST is applied
Vitali Sidaruk created DIRAPI-336:
-------------------------------------
Summary: GeneralizedTime issue with timezone when DST is applied
Key: DIRAPI-336
URL: https://issues.apache.org/jira/browse/DIRAPI-336
Project: Directory Client API
Issue Type: Bug
Affects Versions: 2.0.0.AM2
Environment: Windows 10 pro
JDK 1.8.0_144
api-util 2.0.0.AM2
Reporter: Vitali Sidaruk
I have been facing some issues with timezone when I use GeneralizedTime. Looks like GeneralizedTime is not taking into account DST (daylight saving time) have taken place in Europe.
After the last Sunday in March DST is applied in most European countries. I expect to see +0200 timezone offset when the date in April is converted to the string, but there is a +0100 (line 4 in output section).
I have pasted a following code snippet, where I write date with time and timezone offset to the output from ZonedDateTime and GeneralizedTime.
{code:java}
import org.apache.directory.api.util.GeneralizedTime;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.GregorianCalendar;
ZoneId swissZone = ZoneId.of("Europe/Zurich");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssZ");
ZonedDateTime winterZonedDateTime = LocalDateTime.parse("2019-01-23T01:23:45").atZone(swissZone);
GregorianCalendar winterCalendar = GregorianCalendar.from(winterZonedDateTime);
System.out.println(dateFormat.format(winterCalendar.getTime())); // 20190123012345+0100
GeneralizedTime winterGeneralizedTime = new GeneralizedTime(winterCalendar);
String winterGeneralizedTimeString = winterGeneralizedTime.toGeneralizedTime(
GeneralizedTime.Format.YEAR_MONTH_DAY_HOUR_MIN_SEC,
GeneralizedTime.FractionDelimiter.DOT, 1,
GeneralizedTime.TimeZoneFormat.DIFF_HOUR_MINUTE);
System.out.println(winterGeneralizedTimeString); // 20190123012345+0100
ZonedDateTime summerZonedDateTime = LocalDateTime.parse("2019-04-03T01:23:45").atZone(swissZone);
GregorianCalendar summerCalendar = GregorianCalendar.from(summerZonedDateTime);
System.out.println(dateFormat.format(summerCalendar.getTime())); // 20190403012345+0200
GeneralizedTime summerGeneralizedTime = new GeneralizedTime(summerCalendar);
String summerGeneralizedTimeString = summerGeneralizedTime.toGeneralizedTime(
GeneralizedTime.Format.YEAR_MONTH_DAY_HOUR_MIN_SEC,
GeneralizedTime.FractionDelimiter.DOT, 1,
GeneralizedTime.TimeZoneFormat.DIFF_HOUR_MINUTE);
System.out.println(summerGeneralizedTimeString); // 20190403012345+0100
{code}
The output is
{code:java}
20190123012345+0100 // winter time from ZonedDateTime
20190123012345+0100 // winter time from GeneralizedTime
20190403012345+0200 // summer time from ZonedDateTime
20190403012345+0100 // summer time from GeneralizedTime, expected timezone offset +0200
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)