[ https://issues.apache.org/jira/browse/FINERACT-1394?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aleksandar Vidakovic updated FINERACT-1394: ------------------------------------------- Fix Version/s: 1.9.0 (was: 1.8.0) > Partially Revert FIN-1112 "Replace ZoneId.systemDefault() with tenant's > timezone" > --------------------------------------------------------------------------------- > > Key: FINERACT-1394 > URL: https://issues.apache.org/jira/browse/FINERACT-1394 > Project: Apache Fineract > Issue Type: Bug > Reporter: Avik Ganguly > Assignee: Avik Ganguly > Priority: Major > Fix For: 1.9.0 > > > [~ptuomola] [~Percy Ashu] [~awasum] [~vorburger] : > FINERACT-826 > actualDisbursementDate.toDate() got replaced by > java.util.Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); > Before FINERACT-1112 > actualDisbursementDate = T > Server Timezone : +05:30Z, Tenant Timezone : +6Z > ZoneId zone = ZoneId.systemDefault(); //+05:30Z > ZonedDateTime dateTime = actualDisbursementDate.atStartOfDay(zone); > //Midnight +5:30Z > Instant instant = dateTime.toInstant(); // T-1 Midnight + 18:30 0Z > Date dt = Date.from(instant); // T-1 Midnight + 18:30 + 5:30 = T 00:00 +05:30Z > FINERACT-1112 > If tenant timezone is ahead of server timezone, then :- > Server Timezone : +05:30Z, Tenant Timezone : +6Z > actualDisbursementDate = T > ZoneId zone = DateUtils.getDateTimeZoneOfTenant(); //+6Z // Previously > ZoneId.systemDefault() > ZonedDateTime dateTime = actualDisbursementDate.atStartOfDay(zone); > //Midnight +6Z > Instant instant = dateTime.toInstant(); // T-1 Midnight + 18 0Z > Date dt = Date.from(instant); // T-1 Midnight + 18 + 5:30 = T-1 23:30 +05:30Z > If tenant timezone and server timezones are different, then this creates a > T-1 issue for all txn dates populated by application. > {quote}Hi - in all the places where this currently calls > ZoneId.systemDefault(), should we not be retrieving the appropriate tenant > timezone instead? I know that's not what the previous code does, but wouldn't > that be the right behaviour for any logic that is related to a specific > tenant - i.e. we should be using the tenant's timezone for any dates? > {quote} > {quote}actualDisbursementDate.toDate() got replaced by > java.util.Date.from(actualDisbursementDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); > {quote} > This part looks mostly correct as this is the most popular way > ([https://stackoverflow.com/questions/22929237/convert-java-time-localdate-into-java-util-date-type/22929420]) > to convert time.date to util.date. Note that the popular answer is > questioned in it's comments section because atStartOfDay changes the time but > overall the answer fixes the question. > Problem is with using DateUtils.getDateTimeZoneOfTenant() instead of > ZoneId.systemDefault() as this deviates from the solution provided for > Fineract-826. A tenant is already passing the correct tenant-specific date in > the API. There is no need to mess with the date by applying tenant timezone > all over again. > We have reverted DateUtils.getDateTimeZoneOfTenant() to > ZoneId.systemDefault() wherever date was being parsed with atStartOfDay logic > and so far SIT is successful. Please approve the corresponding PR if you > approve of this logic reversal. -- This message was sent by Atlassian Jira (v8.20.10#820010)