标签:
群里一个网友遇到了这样一个问题,获取当前系统日期,然后通过formatter获取string,之后直接打印出来,然后年份由2015年变成了2016年(借用网友的图片,侵删)
我的第一反应是没有设置时区导致的,如果是时区问题的话,差距一般是一天,可这差一年是怎么回事?我重新把代码敲了一遍,如下:
- (void)dateTest { NSDate *date = [NSDate date]; NSLog(@"date : %@", date); NSDateFormatter *dateForMatter = [[NSDateFormatter alloc] init]; [dateForMatter setDateFormat:@"yyyyMMdd"]; //[dateForMatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]]; NSLog(@"Local date string : %@", [dateForMatter stringFromDate:date]); }
打印结果如下:
2015-12-28 10:29:04.292 Test[1692:320416] date : 2015-12-28 02:29:03 +0000 2015-12-28 10:29:07.523 Test[1692:320416] Local date string : 20151228
并没有出现网友所说的问题,比对了一下代码以后发现唯一的区别就是dateFormat的格式,这位网友用的是“YYYYMMdd”,我这里用的是“yyyyMMdd”。同样的去查了一下Apple的开发文档,找到了下边的例子以及相应的解释,如下:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd ‘at‘ HH:mm"]; NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000]; NSString *formattedDateString = [dateFormatter stringFromDate:date]; NSLog(@"formattedDateString: %@", formattedDateString); // For US English, the output may be: // formattedDateString: 2001-01-02 at 13:00 There are two things to note about this example: 1. It uses yyyy to specify the year component. 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. 2. The representation of the time may be 13:00. In iOS, however, if the user has switched 24-Hour Time to Off, the time may be 1:00 pm.
意思大概是这样的,yyyy指定的是日历上的年份,而YYYY的到的则是现在下一周的年份,比如网友上边的日期是2015-12-28,用yyyy的到的是2015,用YYYY的到的就是2015年12月28号的下一周的年份,也就是2016年了。大多数情况下yyyy和YYYY的到的结果是一样的,但是到每年的最后一周的时候,得到的结果就是下一年。验证的代码如下:
- (void)dateTest { NSString *dateString1 = @"2015-12-27 00:00:00"; NSString *dateString2 = @"2015-12-26 00:00:00"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDateFormatter *formatteryyyyMMdd = [[NSDateFormatter alloc] init]; [formatteryyyyMMdd setDateFormat:@"yyyyMMdd"]; NSDateFormatter *formatterYYYYMMdd = [[NSDateFormatter alloc] init]; [formatterYYYYMMdd setDateFormat:@"YYYYMMdd"]; NSDate *date1 = [formatter dateFromString:dateString1]; NSDate *date2 = [formatter dateFromString:dateString2]; NSLog(@"yyyyMMdd : %@, YYYYMMdd : %@", [formatteryyyyMMdd stringFromDate:date1], [formatterYYYYMMdd stringFromDate:date1]); NSLog(@"yyyyMMdd : %@, YYYYMMdd : %@", [formatteryyyyMMdd stringFromDate:date2], [formatterYYYYMMdd stringFromDate:date2]); }
得到的结果如下:
2015-12-28 11:39:59.642 Test[1739:331497] yyyyMMdd : 20151227, YYYYMMdd : 20161227 2015-12-28 11:40:03.017 Test[1739:331497] yyyyMMdd : 20151226, YYYYMMdd : 20151226
以上。
标签:
原文地址:http://www.cnblogs.com/zpz501/p/5081737.html