@@ -18,6 +18,7 @@ pub struct DateTimeBuilder {
1818 time : Option < time:: Time > ,
1919 weekday : Option < weekday:: Weekday > ,
2020 timezone : Option < time:: Offset > ,
21+ conversion_timezone : Option < time:: Offset > ,
2122 relative : Vec < relative:: Relative > ,
2223}
2324
@@ -98,6 +99,15 @@ impl DateTimeBuilder {
9899 }
99100 }
100101
102+ pub ( super ) fn set_conversion_timezone ( mut self , conversion_timezone : time:: Offset ) -> Result < Self , & ' static str > {
103+ if self . conversion_timezone . is_some ( ) {
104+ Err ( "TZ= cannot appear more than once" )
105+ } else {
106+ self . conversion_timezone = Some ( conversion_timezone) ;
107+ Ok ( self )
108+ }
109+ }
110+
101111 pub ( super ) fn push_relative ( mut self , relative : relative:: Relative ) -> Self {
102112 self . relative . push ( relative) ;
103113 self
@@ -270,6 +280,12 @@ impl DateTimeBuilder {
270280 dt = with_timezone_restore ( offset, dt) ?;
271281 }
272282
283+ if let Some ( mut offset) = self . conversion_timezone {
284+ // Reuse with_timezone_restore with a swapped offset
285+ offset. negative = !offset. negative ;
286+ dt = with_timezone_restore ( offset, dt) ?;
287+ }
288+
273289 Some ( dt)
274290 }
275291}
0 commit comments