From 32a12f25dcf55652c86a2b49e2884276fb8dcbc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Z=C3=B6ller?= Date: Wed, 3 Dec 2025 22:26:56 +0100 Subject: [PATCH] Fixed Date + Time --- src/main/java/org/operaton/fitpub/util/FitParser.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/operaton/fitpub/util/FitParser.java b/src/main/java/org/operaton/fitpub/util/FitParser.java index 453cb87..8fbc625 100644 --- a/src/main/java/org/operaton/fitpub/util/FitParser.java +++ b/src/main/java/org/operaton/fitpub/util/FitParser.java @@ -282,10 +282,16 @@ public class FitParser { /** * Converts FIT DateTime to LocalDateTime. + * FIT timestamps use a special epoch: December 31, 1989, 00:00:00 UTC. + * We need to add the offset from Unix epoch (1970) to FIT epoch (1989). */ private LocalDateTime convertDateTime(DateTime dateTime) { + // FIT epoch offset: seconds between 1970-01-01 and 1989-12-31 + final long FIT_EPOCH_OFFSET = 631065600L; + long timestamp = dateTime.getTimestamp(); - Instant instant = Instant.ofEpochSecond(timestamp); + // Add FIT epoch offset to convert to Unix timestamp + Instant instant = Instant.ofEpochSecond(timestamp + FIT_EPOCH_OFFSET); return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); }