Adakah yang bisa memberi saya gambaran bagaimana mendapatkan tanggal sekarang dalam milidetik?
objective-c
cocoa-touch
ios
date
time
siva
sumber
sumber
Jawaban:
Ada beberapa cara untuk melakukan ini, meskipun favorit pribadi saya adalah:
CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();
Anda dapat membaca lebih lanjut tentang metode ini di sini . Anda juga dapat membuat objek NSDate dan mendapatkan waktu dengan memanggil timeIntervalSince1970 yang mengembalikan detik sejak 1/1/1970:
NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];
Dan di Swift:
sumber
CFAbsoluteTimeGetCurrent()
mengembalikan waktu relatif terhadap tanggal referensiJan 1 2001 00:00:00 GMT
. Bukan karena tanggal referensi diberikan dalam pertanyaan, tetapi perlu diketahui bahwa ini bukan stempel waktu UNIX.Casting NSTimeInterval langsung ke long overflow untuk saya, jadi saya harus melakukan cast ke long.
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
Hasilnya adalah stempel waktu 13 digit seperti di Unix.
sumber
timeIntervalSince1970
Metode tidak kembali pada detik pada jumlah keseluruhan, namun itu adalahdouble
yang juga mencakup kedua pecahan juga yang dapat deret hitung dikonversi ke milidetik. Oleh karena itu, perkalian dengan 1000.long long
? bahasa ini sangat anehNSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);
sumber
extension NSDate { func toMillis() -> NSNumber { return NSNumber(longLong:Int64(timeIntervalSince1970 * 1000)) } static func fromMillis(millis: NSNumber?) -> NSDate? { return millis.map() { number in NSDate(timeIntervalSince1970: Double(number) / 1000)} } static func currentTimeInMillis() -> NSNumber { return NSDate().toMillis() } }
sumber
Anda bisa melakukan ini:
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
ini akan mengembalikan nilai en milidetik, jadi jika Anda mengalikan nilai yang dihasilkan dengan 1000 (seperti yang disarankan Eimantas saya) Anda akan melimpah tipe panjang dan itu akan menghasilkan nilai negatif.
Misalnya, jika saya menjalankan kode itu sekarang, itu akan menghasilkan
currentTime = 1357234941
dan
currentTime /seconds / minutes / hours / days = years 1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
sumber
@JavaZava solusi Anda bagus, tetapi jika Anda ingin memiliki nilai panjang 13 digit agar konsisten dengan pemformatan cap waktu di Java atau JavaScript (dan bahasa lain) gunakan metode ini:
NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); // returned as a double long digits = (long)time; // this is the first 10 digits int decimalDigits = (int)(fmod(time, 1) * 1000); // this will get the 3 missing digits long timestamp = (digits * 1000) + decimalDigits;
atau (jika Anda membutuhkan string):
NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];
sumber
Seperti yang disebutkan sebelumnya, [[NSDate date] timeIntervalSince1970] mengembalikan NSTimeInterval, yang merupakan durasi dalam detik, bukan mili-detik.
Anda dapat mengunjungi https://currentmillis.com/ untuk melihat bagaimana Anda bisa mendapatkan bahasa yang Anda inginkan. Berikut daftarnya -
ActionScript (new Date()).time C++ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() C#.NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() Clojure (System/currentTimeMillis) Excel / Google Sheets* = (NOW() - CELL_WITH_TIMEZONE_OFFSET_IN_HOURS/24 - DATE(1970,1,1)) * 86400000 Go / Golang time.Now().UnixNano() / 1000000 Hive* unix_timestamp() * 1000 Java / Groovy / Kotlin System.currentTimeMillis() Javascript new Date().getTime() MySQL* UNIX_TIMESTAMP() * 1000 Objective-C (long long)([[NSDate date] timeIntervalSince1970] * 1000.0) OCaml (1000.0 *. Unix.gettimeofday ()) Oracle PL/SQL* SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL Perl use Time::HiRes qw(gettimeofday); print gettimeofday; PHP round(microtime(true) * 1000) PostgreSQL extract(epoch FROM now()) * 1000 Python int(round(time.time() * 1000)) Qt QDateTime::currentMSecsSinceEpoch() R* as.numeric(Sys.time()) * 1000 Ruby (Time.now.to_f * 1000).floor Scala val timestamp: Long = System.currentTimeMillis SQL Server DATEDIFF(ms, '1970-01-01 00:00:00', GETUTCDATE()) SQLite* STRFTIME('%s', 'now') * 1000 Swift* let currentTime = NSDate().timeIntervalSince1970 * 1000 VBScript / ASP offsetInMillis = 60000 * GetTimeZoneOffset() WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now()) * 1000 - offsetInMillis + Timer * 1000 mod 1000
Untuk CI objektif melakukan sesuatu seperti di bawah ini untuk mencetaknya -
long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0); NSLog(@"Current date %lld", mills);
Semoga ini bisa membantu.
sumber
NSTimeInterval
milisecondedDate
Nilai Cconvert kensstring
dan setelah itu ubah menjadiint
.sumber
Anda dapat menggunakan metode berikut untuk mendapatkan tanggal sekarang dalam milidetik.
[[NSDate date] timeIntervalSince1970];
ATAU
double CurrentTime = CACurrentMediaTime();
Sumber: iPhone: Bagaimana cara mengetahui milidetik saat ini?
sumber
- (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; }
sumber
Gunakan ini untuk mengetahui waktu dalam milidetik
(long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.sumber
Perpanjangan tanggal mungkin adalah cara terbaik untuk melakukannya.
extension NSDate { func msFromEpoch() -> Double { return self.timeIntervalSince1970 * 1000 } }
sumber