我想我需要的時間設定的NSDate時間:分:秒 目前即時通訊與NSDate的組件工作,但它沒有給出期望的結果如何在NSDate上設置時間?
[comps setHour: -hours];
[comps setMinute:0];
[comps setSecond:0];
NSDate *minDate = [calendar_c dateFromComponents:comps];
我想我需要的時間設定的NSDate時間:分:秒 目前即時通訊與NSDate的組件工作,但它沒有給出期望的結果如何在NSDate上設置時間?
[comps setHour: -hours];
[comps setMinute:0];
[comps setSecond:0];
NSDate *minDate = [calendar_c dateFromComponents:comps];
你的做法應該很好地工作。我需要針對此類型問題(設置各個日期組件)的解決方案,以下代碼對我來說按預期工作。我的情況:我想創建一個使用當前日期的日期對象,但將時間設置爲以字符串形式傳入的值。
NSString *string = @"7:00";
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter *timeOnlyFormatter = [[NSDateFormatter alloc] init];
[timeOnlyFormatter setLocale:locale];
[timeOnlyFormatter setDateFormat:@"h:mm"];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *today = [NSDate date];
NSDateComponents *todayComps = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:today];
NSDateComponents *comps = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[timeOnlyFormatter dateFromString:string]];
comps.day = todayComps.day;
comps.month = todayComps.month;
comps.year = todayComps.year;
NSDate *date = [calendar dateFromComponents:comps];
[calendar release];
[timeOnlyFormatter release];
[locale release];
有一點需要注意的是,當你判斷時間是否準確時,你必須注意時區。例如,在我的應用程序中,當您停在斷點處時,您將看到格林尼治標準時間(因此它看起來不同於輸入時間,這是我的當地時間),但是當時間實際顯示在屏幕上時應用程序,它被格式化顯示在當地時區。您可能需要考慮這一點,以確定結果是實際上與您所期望的不同。
如果這沒有幫助,你能否詳細說明「沒有給出想要的結果」?它給出的結果是什麼,以及與預期的結果相比如何?
我剛剛收到此錯誤:2015-01-16 12:14:05.864 TesInsta [26792:4444831] *** - [__ NSCFCalendar組件:fromDate:]:日期不能爲零 未來異常。 這些錯誤中的一部分將與此投訴一起報告,那麼進一步違規將被忽略。 下面是此次發生的回溯(由於編譯器優化,可能會丟失一些幀): ( –
)Downvote看起來有點苛刻,因爲這個答案在三年半前發佈時效果很好。這個例外從上面的答案或從您的代碼?根據你報告的,看看這裏:http://stackoverflow.com/questions/16094063/sending-nscfcalendar-nil-nsdate-sarcastic-error –
這很適合作爲NSDate
類別。
/** Returns a new NSDate object with the time set to the indicated hour,
* minute, and second.
* @param hour The hour to use in the new date.
* @param minute The number of minutes to use in the new date.
* @param second The number of seconds to use in the new date.
*/
-(NSDate *) dateWithHour:(NSInteger)hour
minute:(NSInteger)minute
second:(NSInteger)second
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components: NSYearCalendarUnit|
NSMonthCalendarUnit|
NSDayCalendarUnit
fromDate:self];
[components setHour:hour];
[components setMinute:minute];
[components setSecond:second];
NSDate *newDate = [calendar dateFromComponents:components];
return newDate;
}
通過上述類別,如果你有你想改變的時候現有的日期,你這樣做是這樣的:
NSDate *newDate = [someDate dateWithHour:10 minute:30 second:00];
但是,如果你嘗試添加或從現有日期減去小時,一個類中的方法來做到這一點也很簡單:
/** Returns a new date with the given number of hours added or subtracted.
* @param hours The number of hours to add or subtract from the date.
*/
-(NSDate*)dateByAddingHours:(NSInteger)hours
{
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setHour:hours];
return [[NSCalendar currentCalendar]
dateByAddingComponents:components toDate:self options:0];
}
在你的類別'dateWithHour:分鐘:第二''日曆'來自哪裏? –
@ Lukasz'Severiaan'Grela這是一個'[NSCalendar currentCalendar]'變量被排除在代碼之外了 – memmons
這是否適用於24h格式和AM/PM格式?例如,如果我這樣調用函數:NSDate * newDate = [someDate dateWithHour:6 minute:30 second:00];那麼「6」是6AM或6PM?顯然,如果我在6點6點的24h格式。 – superpuccio
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:[NSDate date]];
comps.hour = 0;
comps.minute = 15;
NSDate *date = [calendar dateFromComponents:comps];
iOS 8
是Swift2
extension NSDate {
func dateWithHour (hour: Int, minute:Int, second:Int) ->NSDate?{
let calendar = NSCalendar.currentCalendar(),
components = calendar.components([.Day,.Month,.Year], fromDate: self)
components.hour = hour;
components.minute = minute;
components.second = second;
return calendar.dateFromComponents(components)
}
}
NSDate的設計來表示時間真正的約會。你是否想設置實際日期的時間組件? –