Skip to content

mktime invalid normalization #28

@anglov

Description

@anglov

mktime incorrectly normalizes struct tm. When year is leap year and you normalize month interval, one day is lost.

eg.:

for (int i = 0; i < 60; ++i) {
    tm.tm_mon += 1;
    time = mktime(&tm);
    printf("%s", ctime(&time));
}

results with:
Tue Feb 1 06:00:00 2000
Wed Mar 1 06:00:00 2000
Sat Apr 1 06:00:00 2000
Mon May 1 06:00:00 2000
Thu Jun 1 06:00:00 2000
Sat Jul 1 06:00:00 2000
Tue Aug 1 06:00:00 2000
Fri Sep 1 06:00:00 2000
Sun Oct 1 06:00:00 2000
Wed Nov 1 06:00:00 2000
Fri Dec 1 06:00:00 2000
Sun Dec 31 06:00:00 2000
Tue Jan 30 06:00:00 2001

Fri Mar 2 06:00:00 2001
Mon Apr 2 06:00:00 2001
Wed May 2 06:00:00 2001
Sat Jun 2 06:00:00 2001
Mon Jul 2 06:00:00 2001
Thu Aug 2 06:00:00 2001
Sun Sep 2 06:00:00 2001
Tue Oct 2 06:00:00 2001
Fri Nov 2 06:00:00 2001
Sun Dec 2 06:00:00 2001
Wed Jan 2 06:00:00 2002
Sat Feb 2 06:00:00 2002
Sat Mar 2 06:00:00 2002
Tue Apr 2 06:00:00 2002
Thu May 2 06:00:00 2002
Sun Jun 2 06:00:00 2002
Tue Jul 2 06:00:00 2002
Fri Aug 2 06:00:00 2002
Mon Sep 2 06:00:00 2002
Wed Oct 2 06:00:00 2002
Sat Nov 2 06:00:00 2002
Mon Dec 2 06:00:00 2002
Thu Jan 2 06:00:00 2003
Sun Feb 2 06:00:00 2003
Sun Mar 2 06:00:00 2003
Wed Apr 2 06:00:00 2003
Fri May 2 06:00:00 2003
Mon Jun 2 06:00:00 2003
Wed Jul 2 06:00:00 2003
Sat Aug 2 06:00:00 2003
Tue Sep 2 06:00:00 2003
Thu Oct 2 06:00:00 2003
Sun Nov 2 06:00:00 2003
Tue Dec 2 06:00:00 2003
Fri Jan 2 06:00:00 2004
Mon Feb 2 06:00:00 2004
Tue Mar 2 06:00:00 2004
Fri Apr 2 06:00:00 2004
Sun May 2 06:00:00 2004
Wed Jun 2 06:00:00 2004
Fri Jul 2 06:00:00 2004
Mon Aug 2 06:00:00 2004
Thu Sep 2 06:00:00 2004
Sat Oct 2 06:00:00 2004
Tue Nov 2 06:00:00 2004
Thu Dec 2 06:00:00 2004
Sat Jan 1 06:00:00 2005

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions