Відповіді:
Я вважаю, що це селектор NSDate, якого ви шукаєте:
- (NSTimeInterval)timeIntervalSince1970
А Відмітка часу Unix це число секунд , що пройшли з 00:00:00 UTC 1 січня 1970 року Це являє собою представленого типу time_t , який, як правило , підписану 32-розрядний ціле число типу (довге або ціле).
iOS забезпечує - (NSTimeInterval) timeIntervalSince1970 для об’єктів NSDate, який повертає кількість секунд з 00:00:00 GMT 1 січня 1970 року. NSTimeInterval - це тип подвійної плаваючої точки, тому ви отримуєте секунди та частки секунди.
Оскільки вони мають однакові посилання (опівночі 1 січня 1970 UTC) і обидва в секундах перетворення легко, конвертуйте NSTimeInterval у time_t, округлення або обрізання залежно від ваших потреб:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
де piece.piece.last_view є NSDate
Ви можете створити дату часової позначки Unix з дати таким чином:
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
повернення TimeInterval
, що є типологією для 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];
}
[[NSTimeZone systemTimeZone] secondsFromGMT]]
:? Будь ласка, поясніть мало.
Відповідно до пропозиції @ kexik, використовуючи функцію часу UNIX, як показано нижче:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
.За моїм досвідом - не використовуйте timeIntervalSince1970, це дає часову позначку епохи - кількість секунд, ви відстаєте від GMT.
Раніше була помилка з [[датою NSDate] timeIntervalSince1970], вона використовувалась для додавання / віднімання часу на основі часового поясу телефону, але, здається, це вирішено зараз.
[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