2014-01-28 41 views
5

我遇到以下問題。我需要從特定的時間創建一個NSDate對象。時間是今天下午6點在給定的時區(有時是CST,EST等)。不是每天下午6點,而是在特定時區的今天下午6點。用特定時間創建NSDate

我想使用NSCalendar對象來創建特定的日期/時間,但問題是它需要一天,一個月和一年。那麼,如果我沒有正確的日期,我該如何設置這些值。例如:

今天是2014年1月28日11:09在CST。現在,如果我需要創建一個NSCalendar對象,我需要日,月和年。我無法使用NSDate對象的日,月和年計算,因爲它會導致邊緣案例的問題。

任何人都可以指向正確的方向嗎?

+0

NSDateComponents。 –

+0

NSDateFormatter將NSString轉換爲NSDate ... NSDateComponents可能是另一種解決方案。 – Larme

+0

如果您希望6PM「today」,請使用NSDateFormatter在本地時區中格式化日期,追加「18:00:00」,並使用另一個NSDateFormatter讀取日期。 –

回答

7

你的擔心似乎是對邊緣的情況下,這個建議,我認爲不是「18:00今天」你是實際上是在尋找「下一個下午6點」,即如果時間過了下午6點,你希望明天下午6點?

也許下面將幫助,我的猜測是否正確與否:

  1. 獲取當前日期&時間 - NSDate
  2. 獲取當前日曆 - NSCalendar
  3. 設置的時區日曆到您想要的時區
  4. 使用日曆將日期轉換爲組件 - NSDateComponents - 僅提取年,月,日,小時的組件&時區。您現在已將目標時區中的組件向下舍入爲最接近的小時。使用日曆從提取的時間組件中創建NSDate您現在將您的倒圓時間縮短爲NSDate
  5. 使用你的組件計算小時的數量,以增加時間到下一個下午6點。
  6. 將小時數轉換爲秒以生成NSTimeInterval值,並將該時間間隔添加到舍入日期。 NSDate將根據需要照顧提前日期,更改月份等邊緣情況。

HTH

+0

對不起,由於信譽不夠,我無法投票。謝謝你,這正是我想要的。 – user3245545

1

您可以從時間這樣的創建日期:

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *weekdayComponents = [gregorian components:NSCalendarUnitDay fromDate:today]; 
[weekdayComponents setHour:[timeOfDay intValue]]; 
[weekdayComponents setMinute:00]; 

Initialize a NSDate object with a specific time

+0

再次與上面相同的評論。今天會是[NSDate日期],對嗎?但那將是UTC時間。這些值會在大量邊緣情況下動搖。 – user3245545

2
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit) fromDate:[NSDate date]]; 
[components setHour:18]; 
NSDate *todayAt6PM = [calendar dateFromComponents:components]; 
+1

問題是你如何初始化「現在」。如果我現在正確地理解它= [NSDate日期],對吧?但那是UTC時間。我希望這些日子,時間等,以時區「now」爲基礎進行評估。 – user3245545

+0

@ user3245545查看更新的答案請 – singingAtom

6

試用NSDateComponents。

// Initialize date components with date values 
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
    [dateComponents setYear:2014]; 
    [dateComponents setMonth:1]; 
    [dateComponents setDay:28]; 
    [dateComponents setHour:11]; 
    [dateComponents setMinute:9]; 

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDate *configuredDate = [calendar dateFromComponents:dateComponents]; 

我不知道各種NSCalendar標識符配置選項initWithCalendarIndetifier會採取什麼樣的,但如果這個答案是有幫助的,也許有人可以用一些額外的信息添加一個編輯。