Jawaban:
Saya percaya ini adalah pemilih NSDate yang Anda cari:
- (NSTimeInterval)timeIntervalSince1970
Sebuah Unix timestamp adalah jumlah detik sejak 00:00:00 UTC 1 Januari 1970. Ini diwakili oleh jenis time_t , yang biasanya ditandatangani 32-bit tipe integer (panjang atau int).
iOS menyediakan - (NSTimeInterval) timeIntervalSince1970 untuk objek NSDate yang mengembalikan jumlah detik sejak 00:00:00 GMT 1 Januari 1970. NSTimeInterval adalah tipe titik mengambang ganda sehingga Anda mendapatkan detik dan fraksi per detik.
Karena keduanya memiliki referensi yang sama (tengah malam 1Jan1970 UTC) dan keduanya mudah dalam konversi, konversikan NSTimeInterval menjadi time_t, pembulatan atau pemotongan tergantung pada kebutuhan Anda:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
mana piece.piece.last_view adalah NSDate
Anda dapat membuat tanggal cap waktu unix dari tanggal dengan cara ini:
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;
}
CATATAN: - Stempel waktu harus dalam Zona UTC, Jadi saya mengonversi Waktu lokal kami ke Waktu UTC.
Diperbarui untuk Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Catatan
timeIntervalSince1970
mengembalikan TimeInterval
, yang merupakan typealias untuk Double
.
Jika Anda ingin pergi ke arah lain, Anda bisa melakukan yang berikut:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Jika Anda ingin menyimpan waktu ini dalam database atau mengirimkannya ke server ... yang terbaik adalah menggunakan cap waktu Unix. Berikut cuplikan kecil untuk mendapatkannya:
+ (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]]
:? Tolong jelaskan sedikit.
Sesuai saran @ kexik menggunakan fungsi waktu UNIX seperti di bawah ini:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
Sesuai pengalaman saya - jangan gunakan timeIntervalSince1970, itu memberikan cap waktu zaman - jumlah detik Anda berada di belakang GMT.
Dulu ada bug dengan [[tanggal NSDate] timeIntervalSince1970], itu digunakan untuk menambah / mengurangi waktu berdasarkan zona waktu telepon tetapi tampaknya sudah diatasi sekarang.
[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 pertama 1532278070
unixtime kedua 1532278070.461380
unixtime ketiga 1532278070