@@ -38,10 +38,6 @@ namespace data = boost::unit_test::data;
3838using namespace std ::chrono;
3939using namespace std ::chrono_literals;
4040
41-
42- static const auto spTz = locate_zone(" America/Sao_Paulo" );
43- static const auto utcTz = locate_zone(" UTC" );
44-
4541namespace
4642{
4743 template <typename T>
@@ -76,8 +72,7 @@ namespace
7672
7773 struct TimeTzCase final
7874 {
79- Time time;
80- std::string_view zone;
75+ TimeTz timeTz;
8176 std::string_view outputText;
8277 std::optional<std::string_view> inputText = std::nullopt ;
8378 };
@@ -90,8 +85,7 @@ namespace
9085
9186 struct TimestampTzCase final
9287 {
93- Timestamp timestamp;
94- std::string_view zone;
88+ TimestampTz timestampTz;
9589 std::string_view outputText;
9690 std::optional<std::string_view> inputText = std::nullopt ;
9791 };
@@ -166,9 +160,9 @@ BOOST_DATA_TEST_CASE(timeConversion, data::make(TIME_CASES), timeCase)
166160
167161
168162static const std::initializer_list<TimestampCase> TIMESTAMP_CASES {
169- {Timestamp{local_days {2024y / month{2 } / 29d} + 13h + 14min + 15s + 123400us}, " 2024-02-29 13:14:15.1234" },
170- {Timestamp{local_days {1y / month{1 } / 1d} + microseconds::zero ()}, " 0001-01-01 00:00:00.0000" },
171- {Timestamp{local_days {9999y / month{12 } / 31d} + 23h + 59min + 59s + 999900us}, " 9999-12-31 23:59:59.9999" ,
163+ {Timestamp{Date {2024y / month{2 } / 29d}, Time{ 13h + 14min + 15s + 123400us} }, " 2024-02-29 13:14:15.1234" },
164+ {Timestamp{Date {1y / month{1 } / 1d}, Time{ microseconds::zero ()} }, " 0001-01-01 00:00:00.0000" },
165+ {Timestamp{Date {9999y / month{12 } / 31d}, Time{ 23h + 59min + 59s + 999900us} }, " 9999-12-31 23:59:59.9999" ,
172166 " 9999 - 12 - 31 23 : 59 : 59 . 9999 " },
173167};
174168
@@ -196,9 +190,9 @@ BOOST_DATA_TEST_CASE(timestampConversion, data::make(TIMESTAMP_CASES), timestamp
196190
197191
198192static const std::initializer_list<TimeTzCase> TIME_TZ_CASES {
199- {Time{13h + 14min + 15s + 123400us}, " America/Sao_Paulo" , " 13:14:15.1234 America/Sao_Paulo" },
200- {Time{0us }, " America/Sao_Paulo" , " 00:00:00.0000 America/Sao_Paulo" },
201- {Time{23h + 59min + 59s + 999900us}, " America/Sao_Paulo" , " 23:59:59.9999 America/Sao_Paulo" ,
193+ {TimeTz{ Time{16h + 14min + 15s + 123400us}, " America/Sao_Paulo" } , " 13:14:15.1234 America/Sao_Paulo" },
194+ {TimeTz{ Time{3h }, " America/Sao_Paulo" } , " 00:00:00.0000 America/Sao_Paulo" },
195+ {TimeTz{ Time{2h + 59min + 59s + 999900us}, " America/Sao_Paulo" } , " 23:59:59.9999 America/Sao_Paulo" ,
202196 " 23 : 59 : 59 . 9999 America/Sao_Paulo " },
203197};
204198
@@ -209,10 +203,7 @@ BOOST_DATA_TEST_CASE(timeTzConversion, data::make(TIME_TZ_CASES), timeTzCase)
209203
210204 impl::CalendarConverter converter{CLIENT , &statusWrapper};
211205
212- const Date baseTimeTzDate{year{2020 }, month{1 }, 1d};
213- const Timestamp localTimestamp{local_days{baseTimeTzDate} + timeTzCase.time .to_duration ()};
214- const auto localTimestampUtc = utcTz->to_local (spTz->to_sys (localTimestamp));
215- const TimeTz timeTz{Time{localTimestampUtc - floor<days>(localTimestampUtc)}, std::string{timeTzCase.zone }};
206+ const TimeTz& timeTz = timeTzCase.timeTz ;
216207 const std::string outputText{timeTzCase.outputText };
217208 const std::string inputText{timeTzCase.inputText .value_or (outputText)};
218209
@@ -251,11 +242,12 @@ BOOST_DATA_TEST_CASE(timeTzOffsetConversion, data::make(TIME_TZ_OFFSET_CASES), t
251242
252243
253244static const std::initializer_list<TimestampTzCase> TIMESTAMP_TZ_CASES {
254- {Timestamp{local_days {2024y / month{2 } / 29d} + 13h + 14min + 15s + 123400us}, " America/Sao_Paulo" ,
245+ {TimestampTz{ Timestamp{Date {2024y / month{2 } / 29d}, Time{16h + 14min + 15s + 123400us}} , " America/Sao_Paulo" } ,
255246 " 2024-02-29 13:14:15.1234 America/Sao_Paulo" },
256- {Timestamp{local_days{1y / month{1 } / 1d} + 13h + 14min + 15s + 123400us}, " UTC" , " 0001-01-01 13:14:15.1234 UTC" },
257- {Timestamp{local_days{9999y / month{12 } / 31d} + 23h + 59min + 59s + 999900us}, " America/Sao_Paulo" ,
258- " 9999-12-31 23:59:59.9999 America/Sao_Paulo" , " 9999 - 12 - 31 23 : 59 : 59 . 9999 America/Sao_Paulo " },
247+ {TimestampTz{Timestamp{Date{1y / month{1 } / 1d}, Time{13h + 14min + 15s + 123400us}}, " UTC" },
248+ " 0001-01-01 13:14:15.1234 UTC" },
249+ {TimestampTz{Timestamp{Date{year{9999 }, month{12 }, 31d}, Time{23h + 59min + 59s + 999900us}}, " America/Sao_Paulo" },
250+ " 9999-12-31 20:59:59.9999 America/Sao_Paulo" , " 9999 - 12 - 31 20 : 59 : 59 . 9999 America/Sao_Paulo " },
259251};
260252
261253BOOST_DATA_TEST_CASE (timestampTzConversion, data::make(TIMESTAMP_TZ_CASES ), timestampTzCase)
@@ -265,10 +257,7 @@ BOOST_DATA_TEST_CASE(timestampTzConversion, data::make(TIMESTAMP_TZ_CASES), time
265257
266258 impl::CalendarConverter converter{CLIENT , &statusWrapper};
267259
268- auto utcTimestamp = timestampTzCase.timestamp ;
269- if (timestampTzCase.zone != " UTC" )
270- utcTimestamp = utcTz->to_local (spTz->to_sys (timestampTzCase.timestamp ));
271- const TimestampTz timestampTz{utcTimestamp, std::string{timestampTzCase.zone }};
260+ const TimestampTz& timestampTz = timestampTzCase.timestampTz ;
272261 const std::string outputText{timestampTzCase.outputText };
273262 const std::string inputText{timestampTzCase.inputText .value_or (outputText)};
274263
0 commit comments