NSString 到 NSDate 给出前一天的日期

NSString to NSDate gives date with a previous day

我正在尝试将 NSString 转换为 NSDate。我传入的字符串是 02/03/2015 我的转换是这样完成的:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
dateFormat.locale = [NSLocale currentLocale];
dateFormat.timeZone = [NSTimeZone localTimeZone];
dateFormat.timeStyle = NSDateFormatterShortStyle;
dateFormat.dateStyle = NSDateFormatterShortStyle;
dateFormat.locale = [NSLocale currentLocale];
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSDate *date = [dateFormat dateFromString:jsonObject[@"chartDate"]];

我的输出是:“2015-03-01 23:00:00 +0000”所以日期突然倒退了一天(这是从 Coredata 检索的,它是一个 NSDate)。

谁能给我解释一下这是怎么回事?

不,一小时前。原因是时区:

Unexpected value from NSDate

输出的时区为“+0000”:您的计算机可能设置为时区“+0100”。

你的错误是没有理解 NSDate 的含义。 NSDate 包含没有时区的时间点。 NSDate 使用 UTC 显示,即它显示伦敦没有夏令时的时间。如果您在纽约,那么在纽约的今天(午夜)开始时,伦敦的时间将是早上 6 点,这就是 NSDate 显示的内容。如果你在莫斯科,那么在莫斯科的今天(午夜)开始时,伦敦的时间将是前一天的晚上 10 点,这就是 NSDate 显示的内容。

不能不应该做任何事情,这是完全正确的。