You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@fineract.apache.org by "Victor Romero (Jira)" <ji...@apache.org> on 2023/01/25 14:45:00 UTC

[jira] [Commented] (FINERACT-1394) Partially Revert FIN-1112 "Replace ZoneId.systemDefault() with tenant's timezone"

    [ https://issues.apache.org/jira/browse/FINERACT-1394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17680642#comment-17680642 ] 

Victor Romero commented on FINERACT-1394:
-----------------------------------------

Current CalendarUtils implementation is causing Stack Overflow when ZoneId of the System is different to the Tenant Id

> 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)