IOS NSDate NSDateFormatter 导致相差8小时
时间问题应该是所有编程语言都要处理的。详细学过php的同学知道,php中也会有相差8小时的问题,然而php可以非常方便的解决的,直接设置下就好了
我最近在学习IOS的过程中,发现IOS的日期处理也是个大坑。记录下我遇到的问题
我开始使用NSDate获取时间发现 相差8小时,解决方法如下
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date];
NSDate *localeDate = [date dateByAddingTimeInterval: interval];
上面4句代码可以解决NSDate 8小时问题
然后我为了获取今天的起止时间,我就简单 处理成 获取今天的日期,然后拼接 起止时间 00:00:00 ~ 23:59:59
问题来了,在使用NSDateFormatter进行格式化之后,发现又差了8个小时,这真是蛋疼的事情呀
通过如下代码解决
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
这样才解决了我纠结的事情
总结来说IOS在时间日期这块处理的 没有 php优雅,太多冗余代码了
完整代码如下
NSDate *date = [NSDate date];
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate: date];
NSDate *localeDate = [date dateByAddingTimeInterval: interval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *todayDate = [dateFormatter stringFromDate:localeDate];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *startDate = [dateFormatter dateFromString:[todayDate stringByAppendingString:@" 00:00:00"]];
NSDate *endDate = [dateFormatter dateFromString:[todayDate stringByAppendingString:@" 23:59:59"]];