Gre*_*reg 26 objective-c nsdate nscalendar nsdatecomponents
如何设置现有NSDate的时间?
那就是我有一个约会(比如说当前日期/时间),但是想把它设置为特定的时间(例如11.23am).在目标C中最快的方法是什么?
我在看NSCalendar,看的方法,如dateByAddingComponents:toDate:options:,和dateFromComponents:,但这些似乎并没有很切中要害了什么,我需要在这里.例如:
dateFromComponents: - 我必须解决所有这些工作的组件,这似乎有点矫枉过正dateByAddingComponents:toDate:options: - 我不想在我的情况下添加,而是"设置"时间.Ale*_*ers 71
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
[components setHour: 7];
[components setMinute: 59];
[components setSecond: 17];
NSDate *newDate = [gregorian dateFromComponents: components];
Run Code Online (Sandbox Code Playgroud)
我使用NSUIntegerMax而不是特定的OR组合位掩码,因为它更容易,但如果你想指定接收哪些数据组件,请成为我的访客.
Cli*_*udo 11
iOS 7注意:我将这个问题放在其中一些问题中,因为使用NSUIntegerMax似乎不再适用于iOS7,使用它会让我追尾约3个小时.我刚刚发现,当我使用时NSUIntegerMax,NSDateComponents忽略了设定年份.所以例如这不会改变年份:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:NSUIntegerMax fromDate:date];
[comps setYear:year];
return [gregorian dateFromComponents:comps];
Run Code Online (Sandbox Code Playgroud)
这样做:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger timeComps = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSTimeZoneCalendarUnit);
NSDateComponents *comps = [gregorian components:timeComps fromDate:date];
[comps setYear:year];
return [gregorian dateFromComponents:comps];
Run Code Online (Sandbox Code Playgroud)
它可能是一个iOS7错误,也可能是使用NSUIntegerMax工作是一个不再有效的侥幸.我将提交错误报告并获得明确的答案.
无论如何,如果你想避免意想不到的后果,请指定所有其他组件,否则你可能会追逐你的尾巴!
Swift 2.0版本如何将给定日期设置为上午8点
extension NSDate {
func setTo8AM() -> NSDate {
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let components = calendar.components(([.Day, .Month, .Year]), fromDate: self)
components.hour = 8
return calendar.dateFromComponents(components)!
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25844 次 |
| 最近记录: |