Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi there,

The attached patch fixes a bug in our current leap year calculation
code.  It is based on the algorithm posted on wikipedia[1], and seems to
correctly identify year 2000 as a leap year.

Without this, Calc would convert 2000-2-29 into 1899-12-30 on load,
which is ugly but very hard to detect.

Please consider this for 3.5.1, in which case I'll need 3 sign-offs.  I
haven't pushed this to master yet.  I wanted to run it by Eike first
before pushing to master.

Kohei

[1] http://en.wikipedia.org/wiki/Leap_year

-- 
Kohei Yoshida, LibreOffice hacker, Calc
From 0666b5dca1a210ce7abc61a522a59c48661fe664 Mon Sep 17 00:00:00 2001
From: Kohei Yoshida <kohei.yoshida@suse.com>
Date: Tue, 28 Feb 2012 22:01:52 -0500
Subject: [PATCH] Correctly calculate leap year.

With the old code, year 2000 would not be a leap year, but it actually
is.  With this, Calc correctly loads cell with date value of 2000-2-29.
---
 sax/source/tools/converter.cxx |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx
index eb8cc74..95f6494 100644
--- a/sax/source/tools/converter.cxx
+++ b/sax/source/tools/converter.cxx
@@ -1304,7 +1304,7 @@ readDateTimeComponent(const ::rtl::OUString & rString,
 static bool lcl_isLeapYear(const sal_uInt32 nYear)
 {
     return ((nYear % 4) == 0)
-        && !(((nYear % 100) == 0) || ((nYear % 400) == 0));
+        && (((nYear % 100) != 0) || ((nYear % 400) == 0));
 }
 
 static sal_uInt16
-- 
1.7.3.4


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.