我有一个字符串,我知道它将引用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为单位。