UTC字符串到日期和UTC时间计算

时间:2016-01-20 20:22:02

标签: ios objective-c time timezone utc

我有一个字符串,我知道它将引用UTC时间戳

@"2016-01-20T17:00:00"

现在将它转换为实际的NSDate时,它会在打印出来时返回:

NSLog("%@", [TimeHelper stringToDateInUtc:@"2016-01-20T17:00:00"]);
-> 2016-01-20 18:00:00 +0000

与UTC日期相同:

NSLog(@"Time in UTC Now: %@", [TimeHelper getNowUtcAsDate]);

我也有这种方法用于获取UTC的当前时间并将字符串转换为UTC:

+ (NSDate*) stringToDateInUtc:(NSString*)str
{
  NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
  [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
  [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
  return [formatter dateFromString:str];
}

+ (NSString*) getNowUtc
{
  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
  [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

  NSDate *now = [[NSDate alloc] init];
  return [formatter stringFromDate:now];
}

+ (NSDate*) getNowUtcAsDate
{
  return [TimeAndDate stringToDateInUtc:[TimeAndDate getNowUtc]];
}

我正在计算时差,因为我知道发送到这些方法的字符串绝对是“UTC”模式。因此,我需要将它与实际的UTC日期时间进行比较。

那么,为什么我输入的字符串会被转换为错误的时区 - 即使它们被设置为UTC。此外,该方法的UTC时间几乎总是错误的 - 这里有很多对其他帖子的引用。如果我重置我的时钟-2小时,UTC时间戳也是-2小时,它不应该 - 我之所以使用UTC作为参考。

或者只是输出错了?相反,也许可以使用“timeSinceDate”方法进行计算?

重点是,无论我把时钟倒回,UTC时间总是正确的,并且计算自当前UTC时间以来或直到当前UTC时间的字符串总是以UTC为单位。

0 个答案:

没有答案