Skip to content
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

Fix overflow for very big years (>2*10^9) #2551

Merged
merged 1 commit into from
Oct 19, 2021
Merged
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
13 changes: 7 additions & 6 deletions include/fmt/chrono.h
Original file line number Diff line number Diff line change
Expand Up @@ -1420,14 +1420,15 @@ template <typename OutputIt, typename Char> class tm_writer {

// Algorithm:
// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_the_week_number_from_a_month_and_day_of_the_month_or_ordinal_date
auto iso_year_weeks(const int curr_year) const noexcept -> int {
const int prev_year = curr_year - 1;
const int curr_p =
auto iso_year_weeks(const int year) const noexcept -> int {
const long long curr_year = year;
const long long prev_year = curr_year - 1;
const int curr_p = static_cast<int>(
(curr_year + curr_year / 4 - curr_year / 100 + curr_year / 400) %
days_per_week;
const int prev_p =
days_per_week);
const int prev_p = static_cast<int>(
(prev_year + prev_year / 4 - prev_year / 100 + prev_year / 400) %
days_per_week;
days_per_week);
return 52 + ((curr_p == 4 || prev_p == 3) ? 1 : 0);
}
auto iso_week_num(int tm_yday, int tm_wday) const noexcept -> int {
Expand Down