diff --git a/esphome/components/time/posix_tz.cpp b/esphome/components/time/posix_tz.cpp index 1186b3064c..178eaff191 100644 --- a/esphome/components/time/posix_tz.cpp +++ b/esphome/components/time/posix_tz.cpp @@ -354,7 +354,7 @@ time_t calculate_dst_transition(int year, const DSTRule &rule, int32_t base_offs case DSTRuleType::JULIAN_NO_LEAP: // J format: day 1-365, Feb 29 not counted - internal::julian_to_month_day(rule.day, year, month, day); + internal::julian_to_month_day(rule.day, month, day); break; case DSTRuleType::DAY_OF_YEAR: diff --git a/tests/components/time/posix_tz_parser.cpp b/tests/components/time/posix_tz_parser.cpp index 6c1fea36e5..aab714614c 100644 --- a/tests/components/time/posix_tz_parser.cpp +++ b/tests/components/time/posix_tz_parser.cpp @@ -278,12 +278,9 @@ TEST(PosixTzParser, PlainDayInvalidDay366) { // ============================================================================ TEST(PosixTzParser, JulianDay60IsMarch1) { - // J60 is always March 1, regardless of leap year + // J60 is always March 1 (J format ignores leap years by design) int month, day; - internal::julian_to_month_day(60, 2024, month, day); // Leap year - EXPECT_EQ(month, 3); - EXPECT_EQ(day, 1); - internal::julian_to_month_day(60, 2025, month, day); // Non-leap year + internal::julian_to_month_day(60, month, day); EXPECT_EQ(month, 3); EXPECT_EQ(day, 1); } @@ -318,14 +315,14 @@ TEST(PosixTzParser, LeapYearDetection) { TEST(PosixTzParser, JulianDay1IsJan1) { int month, day; - internal::julian_to_month_day(1, 2025, month, day); + internal::julian_to_month_day(1, month, day); EXPECT_EQ(month, 1); EXPECT_EQ(day, 1); } TEST(PosixTzParser, JulianDay365IsDec31) { int month, day; - internal::julian_to_month_day(365, 2025, month, day); + internal::julian_to_month_day(365, month, day); EXPECT_EQ(month, 12); EXPECT_EQ(day, 31); }