如何创建NSDate,如2013-05-11 00:00:00'

时间:2013-05-14 15:05:25

标签: ios

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

假设我有一个日期,就像这样创建:

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毕竟。

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:3)

我认为您正在寻找的是NSDateComponents。来自docs

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:。希望有所帮助。