2016-07-19 1 views
0

UTC가 현재 현지 시간 인 15:11이라고 상상해보십시오. "utc_offset" = "-420”; 나는 분 시간을주고 오프셋 상상 :하드 코드 된 수동 계산없이 NSDate를 UTC 시간대 오프셋으로 오프셋하는 방법

{ 
close = { 
    day = 3; 
    time = 0200; 
}; 
open = { 
    day = 2; 
    time = 1700; 
}; 

나는 또한과 같이 노출 된 UTC 오프셋 성을 나타납니다 그래서 같이 표시되는 사업의 개 폐 시간을 보여주는 서버에서 데이터 집합을 검색 내가 사는 시간대가 UTC이고 사업장의 영업 시간 정보가 로스 앤젤레스에서 7 시간 뒤인 비즈니스를위한 것이라는 점을 고려하면 7 시간 오프셋입니다.

어떻게하면이 속성을 사용하여 시간 계산을 할 수 있습니까? 현재 로컬 시간이 열린 시간과 닫는 시간 사이에 있는지를 확인하고 싶지만 계산이 잘못되었습니다. 시간 비교는 해당 시간대에 대해 계산하기 전에 오프셋되어야 할 때 로컬 시간대에서 비교가 수행되는 것을 고려하십시오.

내가 좋아하는 일을 방지하기 위해 노력하고있어

Psuedocode : NSDate.date hour componenent + (UTC_offset/60 = -7 hours)

업데이트 :가 여기에 사업이 지금

 if currentArmyTime.compare(String(openInfo.time)) != .OrderedAscending && currentArmyTime.compare(String(closeInfo.time)) != .OrderedDescending { 
      //The business is open right now, though this will not take into consideration the business's time zone offset. 
     } 
열려 있으면 나는 현재 확인 해요 방법

현재 시간을 쉽게 오프셋 할 수 있습니까?

+1

NSDateFormatter를 사용하여 시간대를 포함하여 시간대를 분석하십시오. – Paulw11

+0

원하는 것이 무엇인지 완전히 명확하지 않습니다. 현지 시간으로 UTC를 실제로 가지고 있다고 생각하기는 어렵습니다. BST에있을 가능성이 더 큽니까? BST와 PDT간에 변환 하시겠습니까? 아니면 파싱에 관한 것입니까? [캘린더 계산] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836)에서 관련 Apple 문서를 읽었습니까? -SW1)? – hnh

+0

UTC 일 경우 LA는 8 시간 지연됩니다. 그냥 선생님. – Avi

답변

3

날짜 작업에서 '열기'및 '닫기'시간을 사용하려면 먼저 해당 시간대의 표준 시간대로 설정된 달력에서 NSDate를 만들어야합니다. 예를 들면 다음과 같습니다.

// Create calendar for the time zone 
NSInteger timeOffsetInSeconds = -420 * 60; 
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:timeOffsetInSeconds]; 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
calendar.timeZone = tz; 

// Create an NSDate from your source data 
NSDateComponents *comps = [[NSDateComponents alloc] init]; 
comps.day = 1; 
comps.month = 1; 
comps.year = 2016; 
comps.hour = 8; 
comps.minute = 0; 
NSDate *openTime = [calendar dateFromComponents:comps]; 

// 'openTime' can now be to compared with local time. 
NSLog(@"openTime = %@", openTime); // Result is openTime = 2016-01-01 15:00:00 +0000 

위의 코드를 원시 시간과 적용 할 시간 오프셋을 사용하는 방법에 넣어야합니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 내 질문에 대한 업데이트를 확인해 주시겠습니까? – Pavan

+0

저는 현재 NSDate 객체를 얻고 그 오프셋을 추가하는 방법을 알아 내려고 애 쓰고 있습니다. – Pavan

+0

시간 이외에 현지 날짜도 고려해야한다고 생각합니다. 샘플 데이터에서 시작 시간 (오후 5시)과 마감 시간 (오전 2시)은 * 2 일 *입니다. 아마도 'day' 필드가 그 것이다. 소스 데이터에서 요일과 시간 이외의 모든 날짜 구성 요소, 즉 연도와 월을 결정하는 방법이 있습니까? 모든 날짜 구성 요소를 얻었 으면 응답에 표시된 방법을 사용하여 열기 및 닫기 NSDates를 만듭니다. 그런 다음 시간대에 대해 걱정할 필요없이 해당 NSDate에 원시 날짜 연산을 사용할 수 있습니다. – jp2g