使用NSCalendar的如下方法获取日期:
- (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate * _Nullable * _Nullable)datep interval:(nullable NSTimeInterval *)tip forDate:(NSDate *)date;
实例代码如下
NSDate *from;
NSDate *to;
double interfrom;
double interto;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierISO8601];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:LocaleName]];
[calendar rangeOfUnit:NSCalendarUnitDay startDate:&from interval:&interfrom forDate:fromDate];
[calendar rangeOfUnit:NSCalendarUnitDay startDate:&to interval:&interto forDate:toDate];
NSDateComponents *difference = [calendar components:NSCalendarUnitDay fromDate:from toDate:to options:0];
NSInteger days = difference.day;
return days;
参数如下:
fromDate:2020-02-28 13:14:29 +0000:
toDate:2020-02-23 10:14:29 +0000
localName:@"Australia/Melbourne";
from和to得到的值如下:
from:2020-02-28 13:00:00 +0000
to:2020-02-22 13:00:00 +0000
to的日期前移了一天,变成了22号,这是为什么;
如果将Timezone的初始化改为如下方式:
// [calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeZoneInteger*3600]];
timezoneInteger的值为10
得到的from和to值如下:
from:2020-02-27 14:00:00 +0000
to:2020-02-22 14:00:00 +0000
**NSTimeZone两种初始化方式,都是墨尔本的时区,为什么结果会不同呢?
**
其他城市和对应的时区两种方式初始化NSTimeZone,得到的from和to结果也不同,但是timeZoneForSecondsFromGMT:timeZoneInteger:方式初始化更为可靠。