首页 从国家授时中心网站获取时间(获取网络时间)
文章
取消

从国家授时中心网站获取时间(获取网络时间)

获取时间的原理很简单, 就是从网站的请求响应头部读取时间.

具体实现

这里以 国家授时中心 网站为例,.当然,百度什么的网站也是可以的(只是此时获取的是百度的服务器时间).

首先看一下 国家授时中心 网站响应头信息:

国家授时中心网站响应头信息

那么我们只需要拿到 请求响应头 , 然后获取到 Date 字段并对其进行格式化即可.

代码很简单: 我们无需关注拿到的数据, 只要获取到 response 即可.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
NSURL *url = [NSURL URLWithString:@"http://www.ntsc.ac.cn/"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 此处无需获取其他内容, 只需要获取响应头即可, 因此请求方式使用 HEAD
request.HTTPMethod = @"HEAD";

NSURLSessionTask *task =
[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss Z";
    // 不设置地区的话, 在我们自己的机器上面默认就是中文的格式, 
    // 最终结果是 null
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

    NSDate *date = [formatter dateFromString:[[res allHeaderFields] valueForKey:@"Date"]];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSLog(@"date = %@", [formatter stringFromDate:date]);
}];
[task resume];

输出结果:

1
date = 2018-03-02 17:13:17
本文由作者按照 CC BY 4.0 进行授权