iphone NSDate - 获取今天的日期并强制时间

时间:2010-09-10 21:40:35

标签: iphone nsdate

希望对某人来说快一点!我很难理解为什么下面的代码不起作用。我想获得今天的日期(例如:2010-09-10)并手动添加时间。它似乎总是在00:00:00返回。我出错的任何想法?

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyy-MM-dd";

NSString *actualDate = [dateFormatter stringFromDate:[NSDate date]];
NSDate *sDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", actualDate, @"01:00:00"]];
NSDate *eDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", actualDate, @"23:59:59"]];

NSDate对象始终返回格式2010-09-10 00:00:00 +01:00。在某个地方,它只是没有占用时间......任何想法?非常感谢。

*更新*

以下代码有效。我按照建议做了并访问了元素并更新了它们。

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDate *date = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components:unitFlags fromDate:date];

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

//update for the start date
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
NSDate *sDate = [calendar dateFromComponents:comps];

//update for the end date
[comps setHour:23];
[comps setMinute:59];
[comps setSecond:59];
NSDate *eDate = [calendar dateFromComponents:comps];

2 个答案:

答案 0 :(得分:3)

您应该使用NSCalendar代替。它允许您解析当前日期并修改其组件。就像你可以用今天的日期初始化它然后设置时间然后从它获得NSDate

(旧答案:因为你的格式化程序被配置为只识别日期部分。将时间部分添加到它(即使它的名称是NSDateFormatter,它会愉快地解析日期和时间),你也会看到时间。)

答案 1 :(得分:1)

我今天在寻找同样的事情时发现了这个问题,今天创建了一个具有特定时间的NSDate。提出的解决方案并不是我所需要的,所以我想出了这个:

NSDate *                date;
NSString *              string, *timestamp;
NSDateFormatter *       formatter;

timestamp = @"17:30";

formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat: @"yyyy-MM-dd "];
[formatter setTimeZone: [NSTimeZone localTimeZone]];

string = [formatter stringFromDate: [NSDate date]];
string = [string stringByAppendingString: timestamp];

[formatter setDateFormat: @"yyyy-MM-dd HH:mm"];
date = [formatter dateFromString: string];