iOS获取网络时间与转换格式
[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获取网络时间与转换格式的更多相关文章
- php获取当前时间和转换格式
## 获取时间和转换格式```//1.time():返回当前时间的Unix时间戳$stimestamp = time();$date = date("Y-m-d h:i:sa",$ ...
- js获取当前时间,并格式化为"yyyy-MM-dd HH:mm:ss"
/** * Created by Administrator on 2019/11/15. *指尖敲打着世界 ----一个阳光而又不失帅气的少年!!!. */ // js获取当前时间,并格式化为&qu ...
- ESP8266- 使用AT指令获取网络时间
前言:很早就考虑过用 ESP8266 获取网络时间,以前都是用 ESP8266 刷机智云的 Gagent 固件,但无奈现在手头的 ESP-01 的 Flash 只有 1M,实在无法胜任.经过在网络上的 ...
- Swift3.0 iOS获取当前时间 - 年月日时分秒星期
Swift3.0 iOS获取当前时间 - 年月日时分秒星期func getTimes() -> [Int] { var timers: [Int] = [] // 返回的数组 let calen ...
- python获取网络时间和本地时间
今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Lua获取网络时间
作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di Lua获取网络时间 网络授时服务是一些网络上的时间服务器提供的时间,一般用于本地时钟同步. ...
- QT+VS2013 * 获取网络时间
使用qt函数获取网络时间 现在Qt Project Setting中的Qt Modules勾选NetWork,再导入头文件我也忘了叫什么了 QStringList net_time; QTcpSock ...
- 获取当前时间(日期格式) && 获取当前加一年的时间(日期格式)
获取当前时间,日期格式function currentDate() { var date = new Date(); var y = date.getFullYear(); var m = date. ...
- iOS 获取当前时间格式化字符串
iOS 获取当前时间格式化字符串 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保 ...
随机推荐
- IL(Intermediate Language)
释义: IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU ...
- redis的5种数据结构的简介
5种数据结构 1.字符串 Redis 字符串是一个字节序列.在 Redis 中字符串是二进制安全的,这意味着它们没有任何特殊终端字符来确定长度,所以可以存储任何长度为 512 兆的字符串. 示例 12 ...
- asp.net从服务器(指定文件夹)下载任意格式的文件到本地
一.我需要从服务器下载ppt文件到本地 protected void Btn_DownPPT_Click(object sender, EventArgs e) { ...
- js中:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 使用POI插件,提取导出excel的工具类
在网站的不同的模块都需要使用到导入导出excel的功能,我们就需要写一个通用的工具类ExcelUtil. 我的思路:首先,导入和导出的Excel的文件格式固定:主标题,二级标题,数据行(姑且就这么叫) ...
- 为什么说 Git 比 SVN 更好
为什么说 Git 比 SVN 更好 在版本控制系统的选型上,是选择Git还是SVN? 对于开源项目来说这不算问题.使用Git极大地提高了开发效率.扩大了开源项目的参与度. 增强了版本控制系统的安全性, ...
- AT89C 系列单片机解密原理
单片机解密简单就是擦除单片机片内的加密锁定位.由于AT89C系列单片机擦除操作时序设计上的不合理.使在擦除片内程序之前首先擦除加密锁定位成为可能.AT89C系列单片机擦除操作的时序为:擦除开始---- ...
- Flash型单片机的加密与解密
厂商利用单片机进行产品开发时,都会关心其代码和数据的保密性.考虑到用户在编写和调试代码时所付出的时间和精力,代码的成本是不言而喻的. 早期的单片机,代码是交给芯片制造商制成掩膜ROM.有两种加密 ...
- 【剑指offer】面试题31:连续子数组的最大和
题目: 在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2, ...
- 选择排序(Selection Sort)
选择排序就是在选择数组元素上做文章,关键是如何选择?选择的标准是什么?选择之后放在哪?所有这些都是选择排序的问题. 选择排序算法中,通常会有以下操作: 从数组第一个元素开始. 遍历整个数组,找到最小的 ...