Difference between 'YYYY' and 'yyyy' in NSDateFormatter
Solution 1
Also when using a date format string using the correct format is important.
@"YYYY" is week-based calendar year.
@"yyyy" is ordinary calendar year.
You can go through the whole blog, its a good to give it a look
http://realmacsoftware.com/blog/working-with-date-and-time (dead link)
Solution 2
A common mistake is to use YYYY. yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar. In most cases, yyyy and YYYY yield the same number, however they may be different. Typically you should use the calendar year.
from Apple Docs
Solution 3
dd/MMM/YYYY - e.g.:1 01/Jan/2000; answer : 19/dec/1999
(see weekly calendar December month last Monday
suppose leaf year + 1 day)
dd/MMM/yyyy - eg: ordinary - no problem.
Solution 4
All answers differentiating yyyy
and YYYY
are right answers for another question. The question itself refers to another thing.
Why does these two values are different? (extracted from question)
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000
NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM
The answer here @P.J is that they are not really different in value. When you log an NSDate (which is Date 2) you are getting the full description of your object which happens to be on UTC Timezone. This logic does not happen when logging Date 3 because it was already converted to a String and applied your Timezone.
For printing Date 3 the 'same way' as you are getting Date 2. You should specify UTC TimeZone for Date 3. Something like this :
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString);
Hope this helps.
tl;dr the Timezone
Related videos on Youtube
P.J
Full Stack Developer with expertise in iOS Application Development Email address : [email protected] Facebook : http://www.facebook.com/PrateekAJain
Updated on February 09, 2020Comments
-
P.J about 4 years
What is exact difference between 'YYYY' and 'yyyy'. I read in this link, it states that
A common mistake is to use YYYY. yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar. In most cases, yyyy and YYYY yield the same number, however they may be different. Typically you should use the calendar year.
But when I try to use
NSString *stringDate = @"Feb 28, 2013 05:30pm"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"MMM dd, yyyy hh:mma"]; NSDate *date=[dateFormatter dateFromString:stringDate]; NSLog(@"Date 1 : %@",date); //2013-02-28 12:00:00 +0000 NSString *stringDatee = @"Feb 28, 2013 05:30pm"; NSDateFormatter *dateFormatterr = [[NSDateFormatter alloc] init]; [dateFormatterr setDateFormat:@"MMM dd, YYYY hh:mma"]; NSDate *datee=[dateFormatterr dateFromString:stringDatee]; NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"]; NSString *dateString = [dateFormat stringFromDate:datee]; NSLog(@"date 3 : %@", dateString); //Jan 05, 2013 05:30PM
As here, result to
date
anddatee
different, which I understood, but why result of date 2 and date 3 are different? As I am creating date from string and reversing same to string again, but output mismatches?Has anybody knows reason about same?. Though it specifies week of year, still I should get result same.
Thanks..
EDIT :-
If I code
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"]; NSString *dateString = [dateFormatterr stringFromDate:[NSDate date]]; NSLog(@"date: %@", dateString); //Feb 28, 2013 04:37PM
If results me proper result, but same which I pass as string to date I get
2013-01-05 12:00:00 +0000
, check date 2 of NSLog, Strange result, why?-
Admin about 11 yearsOne should watch the WWDC 2011 Video called "Session 117 - Performing Calendar Calculations", 59:11, 142.2 MB (HD)" to get enlightened about virtual reality a là StarTrek? Nope. I mean calendar-based calculations- and what not. If u haven't seen this video please watch it, it's very interesting if u like stuff like that.
-
P.J about 11 years@DigiMonk Thanks, I will look at it..
-
Parag Bafna about 11 years
-
Hot Licks about 10 yearsMainly, YYYY works some of the time, while yyyy works all of the time. If you look at the spec then it's (sorta) clear why.
-
Hot Licks about 10 yearsAnd the difference between date2 and date3 has nothing to do with the year format and is purely due to the fact that the NSDate
description
method always displays that way (and in UTC) -- there is no "format" (or timezone) in an NSDate.
-
-
P.J about 11 yearsThanks for your answer, have you checked my NSLog of date 2 and date 3? Why are they different? I am passing same format, and same thing..
-
X-Factor about 11 yearsI hope its because you are converting a date object into a string, thats why it is giving 2 different results.
-
X-Factor about 11 yearswhenever you convert a date into a string it shows you the same result you are seen check the blog iosdevelopertips.com/cocoa/date-formatters-examples-take-3.html
-
P.J about 11 yearsI am doing string->date and then date->string with same formatter, so ideally is should return me same date again which I passed earlier, but it doesn't.. Why?
-
Gardner Bickford about 11 yearsSorry, my bad. There are 52 weeks in a year. This value should be return which week of the year the date is. This would be good for calculating finance items or recurring calendar events.
-
X-Factor about 11 yearsNo thats the case, whenever you convert a date object into string, it gives you the result like (Jan 05, 2013 05:30PM - full object) i have given you the link go through it.
-
P.J about 11 yearsNo, dont agree with you, reason is that YYYY shows me week based calendar, that is right, but when i convert this week based calendar, I should get correct output?
-
Gardner Bickford about 11 yearsI agree that this identifier is confusing and was not well selected. There are standards reasons why it must exist: en.wikipedia.org/wiki/ISO_week_date
-
X-Factor about 11 yearsSorry bro, then i think i dont have any logical reasoning on this issue except that its the tostring method of NSDate, which converts date into that format :)
-
Gardner Bickford about 11 yearsdatee is an NSLog object. It will return a string representation of itself when concatenated with a string. This means that you are relying on the default format of NSDate when passing datee to NSLog(). If you create NSDate objects with dateWithString you may see the difference.
-
P.J about 8 yearsCan you describe your answer more?
-
gowthaman-mallow about 8 yearssee weekly calendar December month only and see monday date.
-
Clashsoft over 5 yearsThe link is down.
-
André C. Andersen about 4 yearsContent in link is now recovered.