1. Ali Rantakari
  2. Faux Pas
  3. Issues
Issue #53 closed

Optional warning about using "Week Year" based year instead of "Calendar Year" in date format strings

Nikita Zhuk
created an issue

I've now run into this issue couple of times in two different projects. It's not strictly a bug, but in majority of cases it is not what developer actually intented to do.

Instead of this:

    NSDateFormatter *df = [NSDateFormatter new];
    df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    df.dateFormat = @"yyyy-MM-dd'T'HHmmss";

Developer writes this:

    NSDateFormatter *df = [NSDateFormatter new];
    df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    df.dateFormat = @"YYYY-MM-dd'T'HHmmss";

...and it works as expected, most of the time. However, capital Y means week-year (spec). So as today, 31.12.2014, is first week of 2015, "YYYY" produces 2015 while "yyyy" produces 2014. This results in bugs which are time-sensitive and occur around New Year (and holidays...)

Of course there are some legitimate uses of week-year in date formatting, so I wouldn't necessarily enable this rule by default in the FauxPas.

Comments (7)

  1. Nikita Zhuk reporter

    One idea to reduce false positives:

    • If date format string contains specifiers for month (M/L) then week-year is probably not wanted.
    • If date format string contains specifiers for week of year (w) then week-year is probably wanted.
  2. Log in to comment