獲取當(dāng)前時間
- 注意:當(dāng)前時間是格林尼治時間,并非我國北京時間,這一點(diǎn)要明確.
// 獲取當(dāng)前時間(即格林尼治時間)
NSDate *nowDate = [NSDate date];
NSLog(@"nowDate = %@", nowDate);
- 打印結(jié)果:nowDate = 2016-12-06 01:05:11 +0000
獲取本地時間,即北京時間
- 注意:北京時間和格林尼治時間相差8個小時,所以獲取北京時間就是先獲取格林尼治時間,再在格林尼治時間的基礎(chǔ)上加8個小時.
// 獲取本地時間(北京時間) 28800秒 == 8小時
NSDate *localDate = [[NSDate alloc] initWithTimeIntervalSinceNow:28800];
NSLog(@"localDate = %@", localDate);
- 打印結(jié)果:localDate = 2016-12-06 09:05:11 +0000
附加知識:
- 兩者之間的互換需要一個類,叫做NSDateFormatter(日期格式化類)
日期轉(zhuǎn)字符串(NSDate-->NSString)
- 示例代碼如下:
// 獲取本地時間(北京時間) 28800秒 == 8小時
NSDate *localDate = [[NSDate alloc] initWithTimeIntervalSinceNow:28800];
// 打印本地時間,NSDate類型
NSLog(@"localDate = %@", localDate);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *dateString = [dateFormatter stringFromDate:localDate];
// 打印本地時間,NSString類型
NSLog(@"dateString = %@", dateString);
- 兩者打印結(jié)果是一樣的,如下:
localDate = 2016-12-06 09:16:38 +0000
dateString = 2016-12-06 17:16:38 GMT+8
字符串轉(zhuǎn)日期(NSString-->NSDate)
- 代碼如下:
NSString *dateString = @"2016-12-06 11:28:29 8";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];
NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"date = %@", date);
- 打印結(jié)果:date = 2016-12-06 11:28:28 +0000
-
注意:如果字符串的8去掉(8表示東8區(qū)),還有格式字符串的z去掉,那么打印出來的結(jié)果是
date = 2016-12-06 03:28:29 +0000 - 小結(jié):也就是說,NSDateFormatter默認(rèn)格式化出來的時間是格林尼治時間.
獲取NSDate中的年/月/日等等
- 我發(fā)現(xiàn)一個比較奇怪的現(xiàn)象,就是如果獲取日期的某一部分,默認(rèn)拿到的時間全都是北京時間,而不是格林尼治時間,代碼如下
// 通過日期組件對象獲取日期某一部分,不需要給日期加8小時就能獲取本地時間.這讓筆者感到困惑.
// 獲取當(dāng)前時間(格林尼治時間)
NSDate *localDate = [NSDate date];
// 創(chuàng)建日期組件對象
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
// 創(chuàng)建日歷對象
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// 給日期組件對象賦值
NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
dateComponents = [calendar components:unitFlags fromDate:localDate];
NSLog(@"localDate = %@", localDate);
NSLog(@"%ld", dateComponents.year);
NSLog(@"%ld", dateComponents.month);
NSLog(@"%ld", dateComponents.day);
NSLog(@"%ld", dateComponents.hour);
NSLog(@"%ld", dateComponents.minute);
NSLog(@"%ld", dateComponents.second);
- 打印結(jié)果如下:
localDate = 2016-12-06 02:02:25 +0000
2016
12
6
10
2
25 - 注意:看打印出來的小時,下面打印的是早上10點(diǎn),而上面打印出來的是凌晨2點(diǎn).因此我們可以知道,通過組件對象獲取的時間默認(rèn)就是本地時間,而不是格林尼治時間.