Difference between 'YYYY' and 'yyyy' in NSDateFormatter
IosObjective CNsdateNsdateformatterIos Problem Overview
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
and datee
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?
Ios Solutions
Solution 1 - Ios
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 - Ios
> 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 - Ios
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 - Ios
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