Câu trả lời:
Tôi tin rằng đây là công cụ chọn của NSDate mà bạn đang tìm kiếm:
- (NSTimeInterval)timeIntervalSince1970
Một Unix timestamp là số giây kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970. Nó được đại diện bởi kiểu time_t , mà thường là một ký 32-bit integer loại (dài hoặc int).
iOS cung cấp - (NSTimeInterval) timeIntervalSince1970 cho các đối tượng NSDate trả về số giây kể từ 00:00:00 GMT ngày 1 tháng 1 năm 1970. NSTimeInterval là loại dấu phẩy động kép để bạn có được giây và phân số của giây.
Vì cả hai đều có cùng một tham chiếu (nửa đêm 1Jan1970 UTC) và cả hai giây đều dễ dàng chuyển đổi, chuyển đổi NSTimeInterval thành time_t, làm tròn hoặc cắt bớt tùy theo nhu cầu của bạn:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
trong đó mảnh. Mảnh.last_view là một NSDate
Bạn có thể tạo một dấu thời gian unix từ một ngày theo cách này:
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;
}
LƯU Ý: - Dấu thời gian phải nằm trong Vùng UTC, vì vậy tôi chuyển đổi Giờ địa phương của chúng tôi thành Giờ UTC.
Đã cập nhật cho Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Ghi chú
timeIntervalSince1970
trả về TimeInterval
, đó là một typealias cho Double
.
Nếu bạn muốn đi theo con đường khác, bạn có thể làm như sau:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Nếu bạn muốn lưu trữ thời gian này trong cơ sở dữ liệu hoặc gửi nó qua máy chủ ... tốt nhất là sử dụng dấu thời gian Unix. Đây là một đoạn nhỏ để có được điều đó:
+ (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]]
? Hãy giải thích một chút.
Theo đề xuất của @ kexik bằng cách sử dụng chức năng thời gian UNIX như dưới đây:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
.Như theo kinh nghiệm của tôi - không sử dụng timeIntervalSince1970, nó mang lại dấu thời gian epoch - số giây bạn đứng sau GMT.
Đã từng có một lỗi với [[ngày NSDate] timeIntervalSince1970], nó được sử dụng để thêm / bớt thời gian dựa trên múi giờ của điện thoại nhưng dường như nó đã được giải quyết ngay bây giờ.
[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]];
lần đầu tiên 1532278070
lần thứ hai 1532278070.461380
lần thứ ba 1532278070