I have a string
"02:00:00 Feb 05, 2023 PST" which I parse:
ZonedDateTime d = ZonedDateTime.parse(nextPaymentDate, DateTimeFormatter.ofPattern("H:m:s MMM d, uuuu z"));
Comparing it a constructed date:
ZonedDateTime expectedDate = ZonedDateTime.of(2023, 2, 5, 2, 0, 0, 0, ZoneId.of(ZoneId.SHORT_IDS.get("PST")));
Expected :2023-02-05T02:00-08:00[America/Los_Angeles] Actual :2023-02-05T02:00-08:00[America/Tijuana]
Setting exact timezone id (e.g. fixing
America/Tijuana) does not work, as the timezone is parsed differently on another machine (as
America/Los_Angeles instead of
America/Tijuana like on my machine).
How can I assert the dates are equal in this case?
The time zone abbreviations used by Java when parsing depend on the locale, so you cannot compare the result to a fixed value. See this answer.
I would convert the
ZonedDateTime objects to
OffsetDateTime before comparing them, or even to
Instant, as Joachim suggested.