Skip to content

gh-123017: Add Android to the list of platforms where strftime doesn't support negative years #124467

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Lib/test/test_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -654,8 +654,7 @@ def year4d(y):
self.test_year('%04d', func=year4d)

def skip_if_not_supported(y):
msg = "strftime() is limited to [1; 9999] with Visual Studio"
# Check that it doesn't crash for year > 9999
msg = f"strftime() does not support year {y} on this platform"
try:
time.strftime('%Y', (y,) + (0,) * 8)
except ValueError:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Due to unreliable results on some devices, :func:`time.strftime` no longer
accepts negative years on Android.
7 changes: 6 additions & 1 deletion Modules/timemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -813,7 +813,12 @@ time_strftime(PyObject *module, PyObject *args)
return NULL;
}

#if defined(_MSC_VER) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__)
// Some platforms only support a limited range of years.
//
// Android works with negative years on the emulator, but fails on some
// physical devices (#123017).
#if defined(_MSC_VER) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) \
|| defined(__VXWORKS__) || defined(__ANDROID__)
if (buf.tm_year + 1900 < 1 || 9999 < buf.tm_year + 1900) {
PyErr_SetString(PyExc_ValueError,
"strftime() requires year in [1; 9999]");
Expand Down
Loading