Merge pull request #255 from ChrisDryden/fix-tz-prefix-with-base-date

fix: TZ prefix should override base date timezone
This commit is contained in:
Chris Dryden
2026-02-12 03:29:36 -05:00
committed by GitHub
parent 6396c07d72
commit 642bbbf214
2 changed files with 25 additions and 4 deletions
+8 -4
View File
@@ -187,9 +187,13 @@ impl DateTimeBuilder {
/// - e. Apply final fixed offset if present.
pub(super) fn build(self) -> Result<Zoned, error::Error> {
// 1. Choose the base instant.
let base = match (self.base, &self.timezone) {
(Some(b), _) => b,
(None, Some(tz)) => jiff::Timestamp::now().to_zoned(tz.clone()),
// If a TZ="..." prefix was parsed, it should override the base's timezone
// while keeping the base's timestamp for relative date calculations.
let has_timezone = self.timezone.is_some();
let base = match (self.base, self.timezone) {
(Some(b), Some(tz)) => b.timestamp().to_zoned(tz),
(Some(b), None) => b,
(None, Some(tz)) => jiff::Timestamp::now().to_zoned(tz),
(None, None) => Zoned::now(),
};
@@ -204,7 +208,7 @@ impl DateTimeBuilder {
|| self.time.is_some()
|| self.weekday.is_some()
|| self.offset.is_some()
|| self.timezone.is_some();
|| has_timezone;
let mut dt = if need_midnight {
base.with().time(civil::time(0, 0, 0, 0)).build()?