-1

我想这是一个非常基本的问题,但我似乎无法在我的任何书中找到答案。

假设我有一个日期,创建如下:

NSDate *today = [NSDate date];

但我想将“今天”的时间部分更改为“00:00:00”。我怎样才能做到这一点?

- - 添加 - -

我试过这个:

    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:11];
    [components setMonth:5]; 
    [components setYear:2013];
    [components setHour:0];
    [components setMinute:0];
    [components setSecond:0];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *startDate = [calendar dateFromComponents:components];
    NSLog(@"Current date: %@", startDate);

但是 NSLog 打印出这个:

Current date: 2013-05-11 04:00:00 +0000

我猜这与我的纽约时区有关?

- 回答 -

这是任何正在寻找它的人的答案。消除04:00:00时间的技巧是将时区设置为 GMT:

[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

-- 修改后的答案 --

但是您可能实际上需要本地时间——例如,如果您需要按日期在核心数据中查找记录,并且存储的日期是本地时间——所以您可能不想将时区设置为 GMT,毕竟.

4

2 回答 2

5

如果要设置日期的组件,则需要查看NSCalendar处理日期组件的方法:

NSDate *today = [NSDate date];

// Get the year, month, day from the date
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:today];

// Set the hour, minute, second to be zero
components.hour = 0;
components.minute = 0;
components.second = 0;

// Create the date
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:components];
于 2013-05-14T15:14:14.420 回答
3

我认为您正在寻找的是 NSDateComponents。从文档

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];

而不是setDay:等使用setHour:. 希望有帮助。

于 2013-05-14T15:10:16.840 回答