gowerc opened a new issue, #45751: URL: https://github.com/apache/arrow/issues/45751
### Describe the bug, including details regarding any error messages, version, and platform. Apologies in advance if I've made a mistake here I am relatively new to the arrow Cpp API and also to managing datetime stamps, that being said I think there might be a bug with the `compute::LocalTimestamp()` function (at least it appears to be producing results I wouldn't have expected: For example take a timestamp of ``` 2222997212 = Monday, June 11, 2040 3:13:32 UTC = Sunday June 10, 2040 23:13:32 America/New York (EDT) ``` Assuming that the value was stored in a Timestamp array with a timezone of EDT I would have expected after running `compute::LocalTimestamp()` a value to be produced of: ``` 2222982812 = Sunday, June 10, 2040 23:13:32 UTC ``` However in practice when doing this I am observing an actual value of: ``` 2222979212 = Sunday, June 10, 2040 22:13:32 UTC ``` I tried searching but I couldn't see any other issues (open or closed) related to this. ---- I am running on Fedora 41 using libarrow-16.1.0-12.fc41.x86_64 (latest available from the fedora package manager) Code I am running to reproduce this: ```Cpp #include <arrow/api.h> #include <arrow/io/api.h> #include <arrow/compute/api.h> #include <iostream> #include <memory> arrow::Status RunMain() { // Create timestamp array with the target value arrow::TimestampBuilder builder( arrow::timestamp(arrow::TimeUnit::SECOND, "America/New_York"), arrow::default_memory_pool() ); ARROW_RETURN_NOT_OK(builder.Append(2222997212)); ARROW_ASSIGN_OR_RAISE(std::shared_ptr<arrow::Array> array_raw, builder.Finish()); auto array = std::static_pointer_cast<arrow::TimestampArray>(array_raw); // Display what the current value is std::cout << "Value = " << array->Value(0) << std::endl; // 2222997212 // Cast to localtime zone and the display the value again ARROW_ASSIGN_OR_RAISE( auto array_converted_raw, arrow::compute::LocalTimestamp(array) ) auto array_converted = std::static_pointer_cast<arrow::TimestampArray>(array_converted_raw.make_array()); std::cout << "Value = " << array_converted->Value(0) << std::endl; // 2222979212 return arrow::Status::OK(); } int main (int argc, char** argv) { arrow::Status st = RunMain(); if (!st.ok()) { std::cerr << st << std::endl; return 1; } return 0; } ``` ### Component(s) C++ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@arrow.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org