Skip to content

fix: format_z loses sign for negative sub-hour timezone offsets#140

Draft
Koan-Bot wants to merge 1 commit into
cpan-authors:mainfrom
Koan-Bot:koan.atoomic/fix-format-z-negative-subhour
Draft

fix: format_z loses sign for negative sub-hour timezone offsets#140
Koan-Bot wants to merge 1 commit into
cpan-authors:mainfrom
Koan-Bot:koan.atoomic/fix-format-z-negative-subhour

Conversation

@Koan-Bot
Copy link
Copy Markdown

@Koan-Bot Koan-Bot commented May 7, 2026

What

%z format code produces +0030 instead of -0030 for negative
sub-hour timezone offsets.

Why

int($offset / 3600) truncates -1800 to 0, and
sprintf("%+03d", 0) renders as +00 — the negative sign is lost.
This affects any negative offset under one hour (e.g., -0030,
-0015, -0045).

How

Extract sign from the original offset before taking abs(), then
format with an explicit sign character instead of relying on
sprintf %+.

Testing

New t/format-z-sign.t with 6 tests covering negative sub-hour,
positive sub-hour, and zero offsets. Full test suite passes.


🤖 Generated with Claude Code


Quality Report

Changes: 2 files changed, 25 insertions(+), 1 deletion(-)

Code scan: clean

Tests: skipped

Branch hygiene: clean

Generated by Kōan post-mission quality pipeline

int($o / 3600) truncates -1800 to 0, so sprintf("%+03d", 0) produces
"+00" instead of "-00". Affects any negative offset under one hour
(e.g. -0030, -0015, -0045).

Fix: extract sign from original offset before taking abs(), then
format with explicit sign character.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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

Successfully merging this pull request may close these issues.

1 participant