将服务器的UTC日期存储在NSDate对象中



我从服务器接收UTC日期作为2015-10-07 17:43:11。我想将此日期存储在NSDate对象中。我做以下代码:

NSString *dateFromServer = @"2015-10-07 17:43:11";
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [[NSDate alloc] init];
date = [formatter dateFromString:dateFromServer];
NSLog(@"%@", date);

这给我的结果是:

2015-10-07 12:13:11 +0000

(我停留在GMT+05:30区域(。如何将UTC时间(从服务器接收(直接存储到NSDate对象中?

有两种可能的解决方案:

1.让服务器发送嵌入日期字符串中的时区:

"2015-10-07 17:43:11 UTC"

然后使用适当的日期格式对其进行解析,该格式将始终为您提供正确的时区。


2.否则,您必须明确告诉格式化程序字符串的时区,否则它将默认使用设备的当前时区。

let dateFromServer = "2015-10-07 17:43:11"
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
formatter.timeZone = NSTimeZone(abbreviation: "UTC")
if let date = formatter.dateFromString(dateFromServer) {
    print(date) // "2015-10-07 17:43:11"
}

注意:NSDate对象没有时区-日期是通用的,表示一个时间点。要显示带时区的日期,请使用格式化程序创建一个区域设置敏感字符串。

也没有必要这样做:

NSDate *date = [[NSDate alloc] init];

这将创建一个具有当前时间的新日期对象。您将在下一行中覆盖此值。

这样尝试;

NSString *dateFromServer = @"2015-10-07 17:43:11";
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [[NSDate alloc] init]; 
date = [formatter dateFromString:model.start_time]; 
NSLog(@"%@", date);
NSDate *currentDate = [[NSDate alloc] init];

现在是UTC,(至少在使用下面的方法之后(要将此时间存储为UTC(自1970年参考日期起(,请使用

double secsUtc1970 = [[NSDate date]timeIntervalSince1970];

将日期格式化程序设置为输出本地时间:

NSTimeZone *timeZone = [NSTimeZone defaultTimeZone];

//或特定时区:名称为

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
NSString *localDateString = [dateFormatter stringFromDate:currentDate];

NSDate对象总是使用UTC作为时间参考,但日期的字符串表示不一定基于UTC时区。

请注意,UTC不仅仅是一个时区,它是一个地球上时间如何测量、如何协调的系统(UTC中的C代表协调(。NSDate与UTC 1970年1月1日午夜的参考日期有关,尽管苹果公司将其描述为1.1.1970 GMT有点错误。

您不需要隐藏任何内容,只需要考虑如何在UI中显示日期,因为2015-10-07 12:13:11+0000和2015-10-07 17:13:11UTC+5是相同的NSDate实例。

所以,若您想获得从本地时区的服务器检索到的NSDate实例的字符串表示,只需执行此操作。

NSDateFormatter*formatter=[NSDateFormatter new];formatter.timeStyle=NSDateFormatterStyleMediumStyle;formatter.dateStyle=NSDateFormatterStyleMediumStyle;。。。

你可以在苹果文档中找到更多关于如何格式化日期/时间的信息。

最新更新