这是一个非常基本的问题,我猜,但我似乎无法在我的任何一本书中找到答案。
假设我有一个日期,就像这样创建:
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毕竟。
答案 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:
。希望有所帮助。