programing

NSDate를 unix timestamp iphone sdk로 변환하는 방법은 무엇입니까?

css3 2023. 6. 4. 22:28

NSDate를 unix timestamp iphone sdk로 변환하는 방법은 무엇입니까?

변환 방법NSDateUnix 타임스탬프로?저는 반대로 하는 게시물을 많이 읽었습니다.하지만 저는 제 질문과 관련된 어떤 것도 찾지 못하고 있습니다.

당신이 찾고 있는 NSDate의 선택기는 다음과 같습니다.

- (NSTimeInterval)timeIntervalSince1970

Unix 타임스탬프는 1970년 1월 1일 00:00:00 UTC 이후의 초 수입니다.time_t 유형으로 표시되며, 일반적으로 부호 있는 32비트 정수 유형(long 또는 int)입니다.

iOS는 -(NSTime)을 제공합니다.간격)시간1970년 1월 1일 00:00:00 GMT 이후의 초 수를 반환하는 NSDate 개체의 IntervalSince1970.NSTimeInterval은 이중 부동 소수점 유형이므로 초와 분율을 얻을 수 있습니다.

둘 다 참조가 같고(1970년 1월 1일 자정 UTC) 초 단위로 변환하기 쉬우므로 NST 시간을 변환합니다.time_t 간격, 필요에 따라 반올림 또는 잘라내기:

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];

다음과 같은 방법으로 날짜부터 유닉스 타임스탬프 날짜를 생성할 수 있습니다.

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
- (void)GetCurrentTimeStamp
    {
        NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
        [objDateformat setDateFormat:@"yyyy-MM-dd"];
        NSString    *strTime = [objDateformat stringFromDate:[NSDate date]];
        NSString    *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
        NSDate *objUTCDate  = [objDateformat dateFromString:strUTCTime];
        long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);

        NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds];
        NSLog(@"The Timestamp is = %@",strTimestamp);
    }

 - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate  *objDate    = [dateFormatter dateFromString:IN_strLocalTime];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        NSString *strDateTime   = [dateFormatter stringFromDate:objDate];
        return strDateTime;
    }

참고:- 타임스탬프는 UTC 표준시여야 하므로 현지 시간을 UTC 표준시로 변환합니다.

스위프트

Swift 3용으로 업데이트됨

// current date and time
let someDate = Date()

// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970

메모들

  • timeIntervalSince1970의 유형 별칭인 반환Double.

  • 반대 방향으로 가고자 하는 경우 다음을 수행할 수 있습니다.

      let myDate = Date(timeIntervalSince1970: myTimeStamp)
    

이 시간을 데이터베이스에 저장하거나 서버를 통해 전송하려면...Unix 타임스탬프를 사용하는 것이 가장 좋습니다.다음은 이를 위한 간단한 정보입니다.

+ (NSTimeInterval)getUTCFormateDate{

    NSDateComponents *comps = [[NSCalendar currentCalendar] 
                               components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit 
                               fromDate:[NSDate date]];
    [comps setHour:0];
    [comps setMinute:0];    
    [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];

    return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];  
}

제가 선호하는 방법은 간단하게 다음과 같습니다.

NSDate.date.timeIntervalSince1970;

아래와 같이 UNIX 시간 함수를 사용한 @kexik의 제안에 따라:

  time_t result = time(NULL);
  NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);

.내 경험에 따르면 - 시간을 사용하지 마.Interval1970년 이후, 그것은 당신이 GMT보다 늦은 시간(초)의 에포크 타임스탬프를 제공합니다.

이전에 NSDate 날짜 시간에 대한 버그가 있었습니다.IntervalSince1970], 예전에는 전화기의 시간대를 기준으로 시간을 추가/감산하는 방식이었지만, 지금은 해결된 것 같습니다.

 [NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]]; 

첫 번째 유니믹스 타임 1532278070

두 번째 유니믹스 시간 1532278070.461380

세 번째 유니믹스 타임 1532278070

문자열로 타임스탬프가 필요한 경우.

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];

언급URL : https://stackoverflow.com/questions/2997062/how-to-convert-nsdate-into-unix-timestamp-iphone-sdk