溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

iOS中怎么將時(shí)間NSDate轉(zhuǎn)化為毫秒時(shí)間戳

發(fā)布時(shí)間:2021-06-15 15:29:57 來(lái)源:億速云 閱讀:427 作者:Leah 欄目:移動(dòng)開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)iOS中怎么將時(shí)間NSDate轉(zhuǎn)化為毫秒時(shí)間戳,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

對(duì)于將NSDate類(lèi)型轉(zhuǎn)換為時(shí)間戳,相信大家肯定都會(huì),這樣的示例代碼,在百度等搜索引擎上面一搜索就是一大篇的東西,但是,大家有沒(méi)有注意到的是 通過(guò)那些方法轉(zhuǎn)換得到的時(shí)間戳是 10位的數(shù)值,這個(gè)數(shù)值在轉(zhuǎn)化為 NSDate類(lèi)型的時(shí)候,就會(huì)出點(diǎn)兒錯(cuò),你會(huì)發(fā)現(xiàn),每一個(gè)時(shí)間的 毫秒都是為000的;

iOS中怎么將時(shí)間NSDate轉(zhuǎn)化為毫秒時(shí)間戳

錯(cuò)誤的毫秒輸出

而正確的應(yīng)該是下面這樣的輸出:

iOS中怎么將時(shí)間NSDate轉(zhuǎn)化為毫秒時(shí)間戳

正確的毫秒輸出

好了,接下來(lái)就是問(wèn)題所在了:其實(shí)呢,并不是我們代碼出錯(cuò)了,而是因?yàn)?[[NSDate date] timeIntervalSince1970] 雖然可以獲取到后面的毫秒、微秒 ,但是在保存的時(shí)候省略掉了。如一個(gè)時(shí)間戳不省略的情況下為 1395399556.862046 ,省略掉后為一般所見(jiàn) 1395399556 。所以想取得毫秒時(shí)用獲取到的時(shí)間戳 *1000 ,想取得微秒時(shí) 用取到的時(shí)間戳 * 1000 * 1000 。這樣就解釋了上面的10位數(shù)值的問(wèn)題,當(dāng)你取毫秒的時(shí)候,就會(huì)變成13位數(shù)值了。我想這樣大家應(yīng)該明白了吧!

當(dāng)然,說(shuō)了 這么多理論性的東西,為的就是我們接下來(lái)會(huì)附上的代碼的:

將這段代碼寫(xiě)在 你需要獲取時(shí)間戳和轉(zhuǎn)換的地方,而我因?yàn)槭呛?jiǎn)單示范,就放在-viewDidload里面的。

long long time = [self getDateTimeTOMilliSeconds:[NSDate date]];

NSLog(@"%llu",time);

NSDate *dat = [self getDateTimeFromMilliSeconds:time];

NSDateFormatter * formatter = [[NSDateFormatter alloc ] init];

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss.SSS"];

NSString *date = [formatter stringFromDate:dat];

NSString *timeLocal = [[NSString alloc] initWithFormat:@"%@", date];

NSLog(@"\n%@", timeLocal);

里面包含了自己寫(xiě)出來(lái)了2個(gè)小函數(shù),這2個(gè)函數(shù)呢,是互逆的:

//將時(shí)間戳轉(zhuǎn)換為NSDate類(lèi)型

-(NSDate *)getDateTimeFromMilliSeconds:(long long) miliSeconds

{

NSTimeInterval tempMilli = miliSeconds;

NSTimeInterval seconds = tempMilli/1000.0;//這里的.0一定要加上,不然除下來(lái)的數(shù)據(jù)會(huì)被截?cái)鄬?dǎo)致時(shí)間不一致

NSLog(@"傳入的時(shí)間戳=%f",seconds);

return [NSDate dateWithTimeIntervalSince1970:seconds];

}

//將NSDate類(lèi)型的時(shí)間轉(zhuǎn)換為時(shí)間戳,從1970/1/1開(kāi)始

-(long long)getDateTimeTOMilliSeconds:(NSDate *)datetime

{

NSTimeInterval interval = [datetime timeIntervalSince1970];

NSLog(@"轉(zhuǎn)換的時(shí)間戳=%f",interval);

long long totalMilliseconds = interval*1000 ;

NSLog(@"totalMilliseconds=%llu",totalMilliseconds);

return totalMilliseconds;

}

這樣,你就可以得到你想要的13位時(shí)間戳,并且從這個(gè)時(shí)間戳里面獲取正確的時(shí)間(精確到毫秒喲!)。

附:時(shí)間戳轉(zhuǎn)NSDate

+ (NSDate *)getLocateTime:(unsigned int)timeStamp {

 double dTimeStamp = (double)timeStamp;

 NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:dTimeStamp];

 return confromTimesp;

}

關(guān)于iOS中怎么將時(shí)間NSDate轉(zhuǎn)化為毫秒時(shí)間戳就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI