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

Reply via email to