Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Falsche Zeitberechnung in TaskRepositoryTest.kt #2

Open
theofaron opened this issue May 5, 2022 · 3 comments
Open

Falsche Zeitberechnung in TaskRepositoryTest.kt #2

theofaron opened this issue May 5, 2022 · 3 comments

Comments

@theofaron
Copy link

Der Test mit dem in der Datenbank gespeicherten dueDate schlägt jetzt in der Sommrzeit natürlich fehl.

    val date = LocalDateTime.of(
      2020, 3, 23, 12, 0, 0, 0
    ).atOffset(
      ZoneOffset.systemDefault()
        .rules
        .getOffset(LocalDateTime.now())
    )

Müsste es nicht eigentlich so lauten:

    val localDate = LocalDateTime.of(
      2020, 3, 23, 12, 0, 0, 0
    )
    val date = localDate.atOffset(
      ZoneOffset.systemDefault()
        .rules
        .getOffset(localDate)
    )

Wir brauchen ja den Offset vom Datum, und nicht von jetzt. Das Datum liegt in der Normalzeit.

Interessanterweise ist für Kotlin/Java am Tag der Umstellung (hier 29.3.2020) bis einschließlich 2:59:59 Uhr alles noch Normalzeit, für die Datenbank aber ab 2:00:00 Uhr alles schon (richtigerweise) Sommerzeit. Die Zeiten von 2:00:00 bis 2:59:59 gibt es an dem Tag ja auch nicht.

@tryptichon
Copy link

Eine andere Option wäre, den Namen der lokalen Zeitzone für das Offset zu verwenden. Das macht es etwas eindeutiger, was hier passiert:

   val date = LocalDateTime.of(
      2020, 3, 23, 12, 0, 0, 0
    ).atZone(
      ZoneId.of("Europe/Berlin")
    ).toOffsetDateTime()

@theofaron
Copy link
Author

ZoneId.of("Europe/Berlin")

Jein, wäre vielleicht eindeutiger, aber der Code ist dann nicht mehr für alle nutzbar bzw. müsste für Anwender in anderen Zeitzonen angepasst werden. Besser ist es, die Systemeinstellungen des Benutzers zu verwenden, was ZoneOffset.systemDefault() macht.

@tryptichon
Copy link

tryptichon commented Jul 4, 2022

Ja, stimmt. Das sähe dann so aus:

    val date = LocalDateTime.of(
      2020, 3, 23, 12, 0, 0, 0
    ).atZone(
      ZoneOffset.systemDefault()
    ).toOffsetDateTime()

und ist IMHO gut zu verstehen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants