-1

我写了以下方法:

- (NSDate *)stringToDate:(NSString *)dateString
{
    // Convert string to date
    NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
    NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"America/New_York"];
    [dateFormat setDateFormat:@"M/d/yyyy HH:mm:ss"];
    [dateFormat setTimeZone:tz];
    NSDate * date = [dateFormat dateFromString:[NSString stringWithFormat:@"%@ 00:00:00", dateString]];

    return dateOnly;
}

当我只用诸如 11/1/2013 或 11/13/2013 之类的日期调用它时,我得到 2013-11-01 04:00:00 +0000 和 2013-11-13 05:00:00 +0000。

如果我在返回时设置断点,则日期显示正确,但如果我在此调用后在调用函数中中断,则日期与时间一起返回。

为什么我的时间并不总是 0。无论如何可以告诉我我的功能有什么问题吗?

谢谢

更新:

输入字符串如下:11/1/2013 和 11/13/2013

4

1 回答 1

4

NSDate 是一个时间点。它总是有一个时间分量。
如果不作为 NSDateFormatter 的字符串打印,则日期和时间将始终是 UTC/GMT 之一。


格式和日期字符串必须适合。

NSString *dateString = @"11/1/2013";
[dateFormat setDateFormat:@"M/d/yyyy"];

相隔一小时来自夏令时。直到 2013 年 11 月 3 日纽约是夏令时。http://www.timeanddate.com/worldclock/clockchange.html?n=179


好的,那我可以忽略吗?由于时间部分,我在比较失败时尝试比较 NSDates

您应该使用一天中的某个时间(即中午)创建日期,以保存 DST 混乱并进行比较。为此使用 NSComponents。


任何 iOS/Cocoa 开发人员必看:精彩的WWDC 2011 视频“Session 117 - Performing Calendar Calculations”

于 2013-01-07T16:46:31.970 回答