2015-12-15 48 views
0

我需要確定時間戳是否屬於我建立的一組時間範圍。我正在使用以下代碼:如何根據當地時區獲取NSDate的小時組件?

- (BOOL) timeStampInTimeRange: (NSDate *)timestamp { 

    NSCalendar* calendar = [NSCalendar currentCalendar]; 
    NSDateComponents* components = [calendar components:NSCalendarUnitHour fromDate:timestamp]; 
    NSInteger hour = [components hour]; 

    for(int i = 0; i < [timesOfDay count]; i++){ 
     NSArray *range = timesOfDay[i]; 
     if((hour >= [range[0] intValue]) && (hour < [range[1] intValue])){ 
      return TRUE; 
     } 
    } 
    return FALSE; 
} 

但是,這實際上是檢查GMT時區的小時,而不是我的本地時區。我看到如何調整整個日期以根據當地時區打印出來,但如何根據當地時區抓取小時?

+0

'NSCalendar'使用本地時區,除非你另有告知。其中一項:您的日期,設備的設置或「timesOfDay」中的值都是錯誤的。 –

回答

-1

你是這樣想的嗎?它並不完全是你想要的,但可以幫助你。這種方法使得在相同的值UTC時間爲當地時間

+(NSDate *) dateAsCurrentTime 
{ 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDateComponents *components = [cal components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:[NSDate date]]; 

    NSCalendar *calNew = [NSCalendar currentCalendar]; 
    calNew.timeZone=[NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
    NSDate *utcDate = [calNew dateFromComponents:components]; 

    return utcDate; 
} 
+0

但我正在處理現有日期數組,而不是試圖獲取當前日期的小時。 – helloB

+0

我不明白你的問題,它應該檢查你當前的日曆設置?或者您是否知道您查看的其他日期的時區? –

1

您發佈的代碼做的正是你的描述:它需要一個NSDate,因爲它的時間戳參數,然後計算在當前這一日期的小時數時區。您應該記錄該值以確認您獲得了您的期望。

然後,您將您的小時值與存儲到數組timesOfDay中的值進行比較。我的猜測是你的小時範圍是錯誤的(也許那些不是在當前時區中表達的?)