Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:日期转换不正确_Ios_Objective C_Nsdate_Datetime Conversion - Fatal编程技术网

iOS:日期转换不正确

iOS:日期转换不正确,ios,objective-c,nsdate,datetime-conversion,Ios,Objective C,Nsdate,Datetime Conversion,例如,我有一个日期:2014-11-24 12:24:25存储在NSString变量中 我正在尝试将其转换为NSDate对象,以便计算未来的日期: NSDate *futureTimeStamp; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; NSDate *oldDate = [dateFormatt

例如,我有一个日期:2014-11-24 12:24:25存储在NSString变量中

我正在尝试将其转换为NSDate对象,以便计算未来的日期:

NSDate *futureTimeStamp;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

NSDate *oldDate = [dateFormatter dateFromString:timestamp];
它一直告诉我旧的日期时间是:2014-11-24 06:46:06+0000,这是不正确的

知道为什么不能正确转换吗

更新1:

时间戳是一个字符串。存储在该变量中的是:2014-11-24 12:58:40


当我打印oldDate时,它会在2014-11-24 06:58:40+0000中显示这一点,您可以像这样进行时间转换:

NSDate *date = [oldDate dateWithTimeIntervalSinceReferenceDate:milliseconds];

尝试从UTC转换为本地日期

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
  NSDate *date = [dateFormatter dateFromString:timestamp];
  NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
  NSTimeZone *previousTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
  NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date];
  NSInteger currentOffset = [previousTimeZone secondsFromGMTForDate:date];
  NSTimeInterval gmtInterval = currentGMTOffset - currentOffset;
  NSDate *localDate = [[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date];

我是iOS开发新手。。。所以我不知道这对我有什么帮助。。因为oldDate是个问题。。。oldDate未从字符串转换为正确的日期。您可以计算正确时间和转换日期之间的差异。然后可以将转换后的时间转换为正确的时间。选中此项,则日期是正确的,不需要手动移动。上述方法解决不了问题-只需引入更多。NSDate始终以UTC为单位转储。无论您身在何处,您的设备都会认为它位于GMT+6。我不知道为什么,但问题是一样的。代码正常运行。书签:看看hh的意思。当你开始在真正的硬件上测试时,你可能应该注意到一个问题。这肯定帮了我的忙!非常感谢。但是您的日期格式是错误的。而且,将NSDate引用到UTC以外的时区是不好的做法。如果你这样做了,请在wazoo上对其进行注释。@HotLicks日期格式与原始问题匹配,添加注释是你的意见!为什么在答案正确时投反对票…@HotLicks那么日期格式应该是什么??