저는 작업중인 앱에서 유닉스 타임 스탬프 (1970 년 이후)를 생성 할 수 있어야하기 때문에 실험을 시도했습니다. NSDate dateWithTimeIntervalSince1970 GMT/UTC 시간을 반환하지 않습니다.
NSLog(@"Getting timeIntervalSince1970");
double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970];
이
는 일 (1970 년 1 월 1 일부터 초) GMT에 (1970 년 이후) 반환 시대의 초를해야했습니다. 월 8월 15일 9시 54분 30초 2011 년에 실험을 수행 할 때 그러나, 그것은 1313427270.504315을 반환시험이 내 맥 OS 터미널에서 간단한 펄 한 라이너, 내가 얻을 : 이 월 팔월 반환 perl -e 'print scalar(localtime(1313427270))'
하는 15 09:54:30 2011 ...
내가 SF 베이 지역에 있고 내 로컬 시간대가 "쿠퍼 티노"로 설정되어있는 경우 이는 분명 GMT 시간이 아닙니다. 무슨 일이 일어나고 어떻게 해결할 수 있습니까? 사용자가 시간 스탬프를 입력 할 때마다 통신 할 때 내 앱이 서버에 UTC 시간을 보내도록해야합니다. 시간 스탬프는 하나의 동일한 유효한 시간대로 전송됩니다. - 서버에서 사용자의 요청 데이터는, 그것이 UTC에 보내지는 내 응용 프로그램의 다른 부분에서
다음과 같이 변환해서 표시됩니다 :NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setTimeZone:nil];
[dateFormatter setDateFormat:@"yyyyMMdd"];
NSDate *conversationDate = [NSDate dateWithTimeIntervalSince1970:[theConversationTimeStampString intValue]];
NSString *conversationDateString = [dateFormatter stringFromDate:conversationDate];
[dateFormatter release];
을이 아름답게 작동 - 표시 사용자의 시간대와 로케일에서 수정 된 시간 ... 그래서 나는 그것이 들어오는 타임 스탬프에 대해 수행되고 있음을 알고 있습니다. 그래서, 내가 GMT가되는 것을 멈추게하는 첫 번째 함수 (timeIntervalSince190)에 무엇이 잘못 되었습니까?
들으
'1313427270.504315'는 GMT이고 1970 년 1 월 1 일 이후의 초 수이며 이것은 사용자가 어떤 시간대인지에 의존하지 않는 절대 값입니다. GMT의 '2011-08-15 16 : 54 : 30'과 캘리포니아의 '2011-08-15 09 : 54 : 30'에 해당합니다. 둘 다 같은 순간의 다른 표현입니다. – albertamg