Ответы:
Я считаю, что это селектор NSDate, который вы ищете:
- (NSTimeInterval)timeIntervalSince1970
Отметка времени Unix это число секунд , прошедших с 00:00:00 UTC 1 января 1970 года Это представленного типа time_t , который, как правило , подписанное 32-разрядное целое число типа (длинное или целое).
iOS предоставляет - (NSTimeInterval) timeIntervalSince1970 для объектов NSDate, который возвращает количество секунд с 00:00:00 по Гринвичу 1 января 1970 года. NSTimeInterval - это двойной тип с плавающей запятой, поэтому вы получаете секунды и доли секунды.
Так как они оба имеют одинаковую ссылку (полночь 1Jan1970 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
, что является typealias для 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 date] 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]];
первый unixtime 1532278070
второй unixtime 1532278070.461380
третий unixtime 1532278070