3
개발중인 앱은 Javascript의 Date.valueOf() 기능과 일치해야합니다. 그러나 아래의 자바 스크립트와 Objective-c의 값은 다릅니다. 내가 도대체 뭘 잘못하고있는 겁니까?목표 C - 1970 년 1 월 1 일 00:00:00 UTC와 주어진 날짜 사이의 초
자바 스크립트 :
var d = new Date('2016-08-21T09:00:00')
console.debug(d.valueOf()/1000);
// Result: 1471734000
목표 - C :
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[formatter setDateFormat:@"YYYY-MM-dd H:mm:ss"];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[gregorianCalendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDateComponents *startDateComponents = [[NSDateComponents alloc] init];
[startDateComponents setYear:1970];
[startDateComponents setMonth:1];
[startDateComponents setDay:1];
[startDateComponents setHour:0];
[startDateComponents setMinute:0];
[startDateComponents setSecond:0];
[startDateComponents setNanosecond:0];
NSDate *startDate = [gregorianCalendar dateFromComponents:startDateComponents];
NSString* startDateString = [formatter stringFromDate:startDate];
NSDateComponents *endDateComponents = [[NSDateComponents alloc] init];
[endDateComponents setYear:2016];
[endDateComponents setMonth:8];
[endDateComponents setDay:21];
[endDateComponents setHour:9];
[endDateComponents setMinute:0];
[endDateComponents setSecond:0];
[endDateComponents setNanosecond:0];
NSDate *endDate = [gregorianCalendar dateFromComponents:endDateComponents];
NSString* endDateString = [formatter stringFromDate:endDate];
NSTimeInterval distanceBetweenDates = [endDate timeIntervalSinceDate:startDate];
distanceBetweenDates -= timezoneoffset;
printf("Seconds between %s and %s = %f\n", [startDateString UTF8String], [endDateString UTF8String], distanceBetweenDates);
// Result: Seconds between 1970-01-01 0:00:00 and 2016-08-21 9:00:00 = 1471734000
편집 : 코멘트에 따라 업데이트 JS 날짜 생성자입니다. 편집 : Objective-c를 업데이트하여 표준 시간대 오프셋을 설명합니다. 결과에는 차이가 없습니다.
게시 한 Javascript 값이 2016 년 8 월 21 일에 올바르지 않습니다. Objective-C 값이 정확합니다. 내 컴퓨터에서'date + % s' 명령을 실행 한 결과와 거의 일치합니다. – rmaddy
FYI - Javascript Date 명령은 달이 0 일 것으로 예상하여 2016 년 9 월 21 일에 실제로 날짜를 지정했습니다. – rmaddy
Thanks @rmaddy. JS 날짜 생성자를 수정했습니다. 또한 Objective-c 표준 시간대 오프셋을 설명합니다. 결과는 이제 동일합니다. – uxnow