您的位置:首页 > 移动开发 > IOS开发

IOS NSDate NSDateFormatter 导致相差8小时

2016-01-10 04:00 393 查看
时间问题应该是所有编程语言都要处理的。详细学过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"]];


原文地址:IOS NSDate NSDateFormatter 导致相差8小时

智能推荐

【ZBar】ios错误ignoring file xxx missing required architecture x86_64 in file
开启 NFS 文件系统提升 Vagrant 共享目录的性能
MYSQL 命令行显示乱码 解决方案
nginx处理问题笔记
浮点型 转化 成 整形 那点事
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: