Ticket #7257: parsedate.diff

File parsedate.diff, 1.1 KB (added by czeidler, 13 years ago)
  • src/system/libroot/os/parsedate.cpp

     
    766766    if (now == -1)
    767767        now = time(NULL);
    768768
     769    localtime_r(&now, &tm);
     770    int yearInCentury = tm.tm_year % 100;
     771    int century = 1900 + tm.tm_year - yearInCentury;
     772
    769773    if (dateMask.IsComplete())
    770774        memset(&tm, 0, sizeof(tm));
    771775    else {
    772         localtime_r(&now, &tm);
    773 
    774776        if (dateMask.HasTime()) {
    775777            tm.tm_min = 0;
    776778            tm.tm_sec = 0;
     
    821823                    case 'y':
    822824                    case 'Y':
    823825                        tm.tm_year = element->value;
    824                         if (tm.tm_year > 1900)
     826                        if (tm.tm_year < 1900) {
     827                            // just a relative year like 11 (2011)
     828
     829                            // interpret something like 50 as 1950 but
     830                            // something like 11 as 2011 (assuming now is 2011)
     831                            if (yearInCentury + 10 < tm.tm_year % 100)
     832                                tm.tm_year -= 100;
     833                           
     834                            tm.tm_year += century - 1900;
     835                        }
     836                        else {
    825837                            tm.tm_year -= 1900;
     838                        }
    826839                        break;
    827840                    case 'z':   // time zone
    828841                    case 'Z':