2016-08-31 1 views
0

DST 모드에있을 NSDate를 어떻게 생성 할 수 있는지 알고 싶습니다.DST 모드로 될 NSDate를 생성하는 방법

내가 방법을 nextDaylightSavingTimeTransition

를 사용하고이 문서에서입니다 :

이 속성은 수신기에 대한 시간 전환 일광 절약 시간제 (현재 인스턴트 후) 다음의 날짜를 포함합니다. 리시버의 시간대에 에 따라이 속성의 값은 GMT에서 표준 시간대 오프셋의 변경을 나타낼 수 있습니다 ( ). 수신기의 시간대가 현재 일광 절약 시간을 관찰하지 않으면 nil을 반환합니다.

그리고 그것은 DST 모드에있는 경우 내가 검증보다 :

수신기가 사용하는 경우

YES 일광 절약 시간 : isDaylightSavingTimeForDate:

이 문서에서이다 : 나는이 방법을 사용하고

aDate에 그렇지 않으면 NO.

코드 :

NSDate *nextDstTransition = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransition]; 


BOOL isDstOnForOldDate = [[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:nextDstTransition]; 

불행하게도 내 nextDstTransition이 DST에 있지 않습니다. 내 가정은 시간대 문제와 관련이 있습니다.

DST 모드에서 NSDate 만들기에 대한 옵션을 공유해 주시겠습니까?

+1

1) NSDate에 시간대 또는 "DST 모드"가 없습니다. 무엇을 성취하려고합니까? - 2) 두 개의 다른 변수'nextDstTransition'과'oldWordate'는 어떻게 관련되어 있습니까? - 3) Objective-C 또는 Swift에 대한 질문입니까? –

+0

@MartinR 1) Thx 2) 실수를 수정하십시오. 3) 응답이 신속하거나 목적으로 C에있을 수 있습니다. –

+1

현재 DST가 활성화되어 있으므로 nextDaylightSavingTimeTransition은 DST가 끝나는 다음 시점을 반환하므로 isDaylightSavingTimeForDate는 해당 날짜에 대해 false를 반환합니다. - 성취하려는 것은 무엇입니까? –

답변

1

주의 깊게 문서를 읽을 경우 nextDaylightSavingTimeTransition는 다음 DST의 주어진 날짜 이후의 변화, 또는 전무는 DST가 변경되지 않습니다 시간대에있는 경우 때 다음 시간을 반환 (중 항상 또는 항상 오프) . 날짜가 DST 인 경우에는 괜찮습니다. 그렇지 않으면 변경시기를 알아야합니다.

NSDate* date = ... 
if (! [[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:date]) { 
    NSDate* change = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransitionAfterDate:date]; 
    if (change != nil) { 
     date = change; 
    } else { 
     // Tough, there is no DST in this time zone. 
    } 
} 
+0

대답은 이미 이해하고 있습니다. –

1

가장 세련된 솔루션을 조사하고 검색 한 결과 이러한 방식으로 처리 할 수 ​​있음을 이해합니다.

//This is date object and from beginning we could make prediction that is is in DST Mode.  
NSDate *workDateInDST = [[NSTimeZone localTimeZone] nextDaylightSavingTimeTransition]; 
//Hear we could validate if it is DST or not 
if (![[NSTimeZone localTimeZone] isDaylightSavingTimeForDate:workDateInDST]) { 
    workDateInDST = [NSDate date]; 
} 
+1

* 지금 * 당신이 원하는 것을 이해합니다. 나는 아마 다른 방향으로 나아갈 것이다. 현재 날짜가 DST인지 먼저 테스트합니다. 그렇지 않은 경우 nextDaylightSavingTimeTransition을 사용하여 다른 날짜를 계산하십시오. –

+0

@MartinR thx 나는 나를 도와 주셔서 당신에게 질문을하겠습니다. –

+0

제발 그렇게하지 마세요. "연속 upvoting"SO에서 감지하고 자동으로 되돌립니다. 그건 내 평판 역사에 나쁜 인상을 남긴다. –