如何保存两个日期,一个使用本地日期,另一个使用UTC

时间:2016-12-24 11:44:58

标签: ios nsdateformatter

我需要使用核心数据在交易表中按照用户时区和UTC时间存储本地时间

我想要的是如下

createDate应该反映用户的本地时区,在这种情况下我在中国所以GMT + 8

createDateUtc应代表相同的时间戳,但在 UTC

我尝试了各种格式化程序但由于某些原因我无法得到我想要的结果

以下是我的两个格式化程序,您可以看到我尝试使用时区,但它仍然没有将日期设置为UTC。

 NSDateFormatter *dateFormatterWithTz = [[NSDateFormatter alloc] init];  
  [dateFormatterWithTz setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];  

   NSDateFormatter *dateFormatterUtc = [[NSDateFormatter alloc] init];  
  [dateFormatterUtc setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];  
  //[dateFormatterUtc setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];  

这是我如何创建日期变量

 NSDate *createdDateUtc = [NSDate date];   
 NSDate *createdDate = [NSDate dateWithTimeInterval:[[NSTimeZone systemTimeZone] secondsFromGMT] sinceDate:createdDateUtc];  

以下是数组看起来不正确的内容,因为您可以看到它创建了我的Utc日期作为我的本地日期并将创建的日期推送到明天仍然使用相同的时间偏移,问题应该是我的UTC日期是设置为当地时间,但我无法弄清楚如何使其成为UTC,以便从

正确计算我创建的日期
createdDate = "2016-12-25T03:19:38+08:00";  
createdDateUtc = "2016-12-24T19:19:38+08:00";  

1 个答案:

答案 0 :(得分:1)

您需要为日期格式化程序提供timeZone

本地时区试试这个

NSDateFormatter *formate =[[NSDateFormatter alloc] init];
[formate setTimeZone:[NSTimeZone localTimeZone]];
[formate setDateFormat:@"yyyy-MM-dd HH:mm:ss a"];
NSString *strToday =[formate stringFromDate:[NSDate date]];

和UTC时区设置 UTC时区,如下所示

NSDateFormatter *formate =[[NSDateFormatter alloc] init];
[formate setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[formate setDateFormat:@"yyyy-MM-dd HH:mm:ss a"];
NSString *strToday =[formate stringFromDate:[NSDate date]];

希望这会对你有所帮助。