[NSDate date]可以获取系统时间,但是会造成一个问题,用户可以自己修改手机系统时间,所以有时候需要用网络时间而不用系统时间。获取网络标准时间的方法:

1、先在需要的地方实现下面的代码,创建一个URL并且连接

 NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest *request=[NSURLRequest requestWithURL:url];
NSURLConnection *connection=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
[connection start];

2、实现代理方法,接收回应的数据(需要声明<NSURLConnectionDataDelegate>)

/**
* 代理方法
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
// NSLog(@"response--%@",response);
NSHTTPURLResponse *httpResponse=(NSHTTPURLResponse *)response;
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dict=[httpResponse allHeaderFields];
// NSLog(@"dict--%@",dict);
NSString *time=[dict objectForKey:@"Date"];
NSLog(@"date--%@___class---%@",date,[date class]);
}
}

这时候接收到的数据是这样的

Tue, 30 Jun 2015 03:55:54 GMT

类型是NSCFString,如果我们需要用的是NSDate的数据就需要进行转换。。。。。。

转换的方法是。。。。。。。。。。。你需要了解的知识是截取字符串,格式化......具体做法是这样的,可以写一个转换的函数,把字符串作为参数传进来,1、截取字符串

NSString *timeStr=[str substringWithRange:NSMakeRange(5, 20)];//截取字符串

2、格式化

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"dd MMM yyyy HH:mm:ss"];//设置源时间字符串的格式

NSDate* date = [formatter dateFromString:timeStr];//将源时间字符串转化为NSDate

在模拟器上运行的时候,你会发现出来的数据比标准时间还少了8小时。。。。。。Why????

少了这个

NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"];

[formatter setTimeZone:timeZone];

好,以为做完了,模拟器上也正常了,真机试试,出来的值为null.....好烦...其实还少了配置区域

是这样:

NSLocale *local=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];

[formatter setLocale:local];//需要配置区域,不然会造成模拟器正常,真机日期为null的情况

en_US_POSIX是什么?查了一下,还有另外一个选择,是en_US,两个有什么区别呢?目前换了另一个参数看上去结果是一样的,但是苹果推荐用en_US_POSIX,文档上说的意思大约是,en_US_POSIX和en_US出来的时间是一样的,但是如果美国,在未来的某个时刻,它改变日期格式的方式,用“en_US”将改变以反映新的行为,但“en_US_POSIX”不会,在机器上(“en_US_POSIX”适用于iPhone操作系统一样,它在Mac OS X上。

最后付上转换代码:

-(NSDate *)dateFromNSString:(NSString *)str{
//Tue, 30 Jun 2015 03:55:54 GMT
//30 Jun 2015 03:55:54
NSString *timeStr=[str substringWithRange:NSMakeRange(5, 20)];//截取字符串
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
NSLocale *local=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[formatter setLocale:local];//需要配置区域,不然会造成模拟器正常,真机日期为null的情况
[formatter setTimeZone:timeZone];
[formatter setDateFormat:@"dd MMM yyyy HH:mm:ss"];//设置源时间字符串的格式
NSDate* date = [formatter dateFromString:timeStr];//将源时间字符串转化为NSDate
NSLog(@"date--%@___class---%@",date,[date class]);
//可以自己再换格式,上面是源,下面是目标
// NSDateFormatter* toformatter = [[NSDateFormatter alloc] init];
// [toformatter setDateStyle:NSDateFormatterMediumStyle];
// [toformatter setTimeStyle:NSDateFormatterShortStyle];
// [toformatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];//设置目标时间字符串的格式
// NSString *targetTime = [toformatter stringFromDate:date];//将时间转化成目标时间字符串
// NSDate* toDate = [formatter dateFromString:targetTime];//将源时间字符串转化为NSDate
return date;
}

iOS获取网络时间与转换格式的更多相关文章

  1. php获取当前时间和转换格式

    ## 获取时间和转换格式```//1.time():返回当前时间的Unix时间戳$stimestamp = time();$date = date("Y-m-d h:i:sa",$ ...

  2. js获取当前时间,并格式化为"yyyy-MM-dd HH:mm:ss"

    /** * Created by Administrator on 2019/11/15. *指尖敲打着世界 ----一个阳光而又不失帅气的少年!!!. */ // js获取当前时间,并格式化为&qu ...

  3. ESP8266- 使用AT指令获取网络时间

    前言:很早就考虑过用 ESP8266 获取网络时间,以前都是用 ESP8266 刷机智云的 Gagent 固件,但无奈现在手头的 ESP-01 的 Flash 只有 1M,实在无法胜任.经过在网络上的 ...

  4. Swift3.0 iOS获取当前时间 - 年月日时分秒星期

    Swift3.0 iOS获取当前时间 - 年月日时分秒星期func getTimes() -> [Int] { var timers: [Int] = [] // 返回的数组 let calen ...

  5. python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  6. Lua获取网络时间

    作者:ani_di  版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di Lua获取网络时间 网络授时服务是一些网络上的时间服务器提供的时间,一般用于本地时钟同步. ...

  7. QT+VS2013 * 获取网络时间

    使用qt函数获取网络时间 现在Qt Project Setting中的Qt Modules勾选NetWork,再导入头文件我也忘了叫什么了 QStringList net_time; QTcpSock ...

  8. 获取当前时间(日期格式) && 获取当前加一年的时间(日期格式)

    获取当前时间,日期格式function currentDate() { var date = new Date(); var y = date.getFullYear(); var m = date. ...

  9. iOS 获取当前时间格式化字符串

    iOS 获取当前时间格式化字符串 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保 ...

随机推荐

  1. NFinal学习笔记(一)

    NFinal框架,最快的netWeb框架,其有三大特色,NFinalServer,NFinalBuild,NFinal代码生成器(生成web层) 首先学习了NFinalServer. NFinalSe ...

  2. 网页搜索功能 多表搜索sql

    SELECT ID, Title, FromTableFROM (SELECT ID, ArticleName AS Title, 'Article' AS FromTable        FROM ...

  3. visifire 图表属性样式设置说明,字体,阴影设置

  4. web-打印

    项目前景 由于之前的打印是客户端程序,也就是winform做的,现在需要改版成网页版,其他功能都能够很好的实现,就是在打印上遇到一些难点.由于第一次做打印功能,刚开始照搬winform中调用word文 ...

  5. 吸血鬼数字算法参考 -- javascript版本

    // 吸血鬼数字 java编程思想 第四章 75页 练习10 for (var i = 10; i <= 99; i++) { for (var j = i + 1; j < 99; j+ ...

  6. CSS凹型导航按钮

    一般需求,圆角看起来更加舒服,但是下面直角略显生硬 于是设计师有了下面的需求,下面加上小凹型: 凹型?凹型?凹型?有点变态,这怎么实现........... 图片肯定是最先考虑到的,CSS实现有貌似有 ...

  7. HDU 4810 这道题 是属于什么类型?

    统计每一位出现1的个数  求组合数 直接贴代码 #include <iostream> #include <cstdio> #include <cmath> #in ...

  8. window.open() | close()方法

    Window对象的open()方法可以打开一个新的浏览器窗口(或标签页),window.open()载入指定的URL到新的或已存在的窗口中,返回代表那个窗口的window对象,它有4个可选的参数 1. ...

  9. Failed to collect certificates from /data/app/vmdl201020547.tmp/base.apk: META-INF/CERT.SF indicates /data/app/vmdl201020547.tmp/base.apk is signed using APK Signature Scheme v2, but no such signature

    错误信息: 12-26 11:08:44.809 1501-1535/system_process E/PackageInstaller: Commit of session 201020547 fa ...

  10. php环境安装及搭建

    最近由于项目需要 转战 PHP .  在做了差不多两年java后 说实话看php代码还是有些难受的. 毕竟不习惯.废话不说 先说一下 PHP环境的部署等等,也就是最近几天学习的心得吧.方便以后参考. ...