LouisLou2 opened a new issue, #2118: URL: https://github.com/apache/fury/issues/2118
### Search before asking - [x] I had searched in the [issues](https://github.com/apache/fury/issues) and found no similar issues. ### Version Fury: Latest development branch OS: Windows 11 Python: 3.12 The issue is not present on Linux ### Component(s) Python ### Minimal reproduce step The issue occurs in CrossLanguageTest.java when running on Windows. The error happens when Fury tries to serialize datetime objects with timestamps close to the epoch (1970-01-01). The root cause is in python/pyfury/_serialization.pyx at line 1192: ```python timestamp = int(value.timestamp() * 1000000) ``` The timestamp() method on naive datetime objects fails on Windows for early dates. This can be reproduced with: ```python import datetime # This fails on Windows d = datetime.datetime.fromtimestamp(timestamp=100) # Early date: Jan 1, 1970 00:01:40 t = d.timestamp() # OSError: [Errno 22] Invalid argument # These work fine on Windows d1 = datetime.datetime.fromtimestamp(timestamp=1000000) # Later date t1 = d1.timestamp() # Works fine d2 = datetime.datetime.fromtimestamp(timestamp=100, tz=datetime.timezone.utc) # With timezone t2 = d2.timestamp() # Works fine ``` ### What did you expect to see? Cross-language serialization tests should pass on both Linux and Windows platforms. ### What did you see instead? On Windows, serialization fails with: ```bash ERROR:root:Execute ['test_cross_language_serializer', 'C:\\Users\\86511\\AppData\\Local\\Temp\\test_cross_language_serializer2918297548183494188data'] failed with [Errno 22] Invalid argument Traceback (most recent call last): File "d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 622, in <module> func(*args[1:]) File "d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 337, in test_cross_language_serializer fury.serialize(obj, buffer=new_buf) File "python/pyfury/_serialization.pyx", line 639, in pyfury._serialization.Fury.serialize File "python/pyfury/_serialization.pyx", line 688, in pyfury._serialization.Fury._serialize File "python/pyfury/_serialization.pyx", line 746, in pyfury._serialization.Fury.xserialize_ref File "python/pyfury/_serialization.pyx", line 764, in pyfury._serialization.Fury.xserialize_nonref File "python/pyfury/_serialization.pyx", line 1071, in pyfury._serialization.CrossLanguageCompatibleSerializer.xwrite File "python/pyfury/_serialization.pyx", line 1192, in pyfury._serialization.TimestampSerializer.write OSError: [Errno 22] Invalid argument Traceback (most recent call last): File "C:\Users\86511\.conda\envs\pyfury_dev6\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Users\86511\.conda\envs\pyfury_dev6\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 622, in <module> func(*args[1:]) File "d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 337, in test_cross_language_serializer fury.serialize(obj, buffer=new_buf) File "python/pyfury/_serialization.pyx", line 639, in pyfury._serialization.Fury.serialize File "python/pyfury/_serialization.pyx", line 688, in pyfury._serialization.Fury._serialize File "python/pyfury/_serialization.pyx", line 746, in pyfury._serialization.Fury.xserialize_ref File "python/pyfury/_serialization.pyx", line 764, in pyfury._serialization.Fury.xserialize_nonref File "python/pyfury/_serialization.pyx", line 1071, in pyfury._serialization.CrossLanguageCompatibleSerializer.xwrite File "python/pyfury/_serialization.pyx", line 1192, in pyfury._serialization.TimestampSerializer.write OSError: [Errno 22] Invalid argument ``` The error trace shows that it occurs in TimestampSerializer.write when calling value.timestamp() on datetime objects with early timestamps. ### Anything Else? This appears to be a Windows-specific issue in Python's datetime implementation. There's an open Python issue for this: [Timestamp conversion on windows fails with timestamps close to EPOCH #81708](https://github.com/python/cpython/issues/81708) Workaround: Add timezone information to datetime objects before calling timestamp(), for example by using: ```python datetime.datetime.fromtimestamp(timestamp=100, tz=datetime.UTC) ``` ### Are you willing to submit a PR? - [x] I'm willing to submit a PR! -- 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: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
