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

錯(cuò)誤的毫秒輸出
而正確的應(yīng)該是下面這樣的輸出:

正確的毫秒輸出
好了,接下來就是問題所在了:其實(shí)呢,并不是我們代碼出錯(cuò)了,而是因?yàn)?[[NSDate date] timeIntervalSince1970] 雖然可以獲取到后面的毫秒、微秒 ,但是在保存的時(shí)候省略掉了。如一個(gè)時(shí)間戳不省略的情況下為 1395399556.862046 ,省略掉后為一般所見 1395399556 。所以想取得毫秒時(shí)用獲取到的時(shí)間戳 *1000 ,想取得微秒時(shí) 用取到的時(shí)間戳 * 1000 * 1000 。這樣就解釋了上面的10位數(shù)值的問題,當(dāng)你取毫秒的時(shí)候,就會(huì)變成13位數(shù)值了。我想這樣大家應(yīng)該明白了吧!
當(dāng)然,說了 這么多理論性的東西,為的就是我們接下來會(huì)附上的代碼的:
將這段代碼寫在 你需要獲取時(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);
里面包含了自己寫出來了2個(gè)小函數(shù),這2個(gè)函數(shù)呢,是互逆的:
//將時(shí)間戳轉(zhuǎn)換為NSDate類型
-(NSDate *)getDateTimeFromMilliSeconds:(long long) miliSeconds
{
NSTimeInterval tempMilli = miliSeconds;
NSTimeInterval seconds = tempMilli/1000.0;//這里的.0一定要加上,不然除下來的數(shù)據(jù)會(huì)被截?cái)鄬?dǎo)致時(shí)間不一致
NSLog(@"傳入的時(shí)間戳=%f",seconds);
return [NSDate dateWithTimeIntervalSince1970:seconds];
}
//將NSDate類型的時(shí)間轉(zhuǎn)換為時(shí)間戳,從1970/1/1開始
-(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;
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決
大家都知道WebViewJavascriptBridge它主要幫助我們優(yōu)雅的實(shí)現(xiàn)OC與JS的交互,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10
swift3.0實(shí)現(xiàn)圖片放大縮小動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了swift3.0實(shí)現(xiàn)圖片放大縮小動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
iOS中UIImagePickerController圖片選取器的用法小結(jié)
UIImagePickerController平時(shí)就是用來做應(yīng)用中從相冊(cè)中選取圖片功能的,這里我們就來整理一下iOS中UIImagePickerController圖片選取器的用法小結(jié),需要的朋友可以參考下2016-05-05
實(shí)例講解iOS應(yīng)用開發(fā)中使用UITableView創(chuàng)建自定義表格
這篇文章主要介紹了iOS應(yīng)用開發(fā)中使用UITableView創(chuàng)建自定義表格的方法,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01
iOS scrollview實(shí)現(xiàn)三屏復(fù)用循環(huán)廣告
這篇文章主要介紹了iOS scrollview實(shí)現(xiàn)三屏復(fù)用循環(huán)廣告,從服務(wù)器請(qǐng)求的廣告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Objective-C中編程中一些推薦的書寫規(guī)范小結(jié)
這篇文章主要介紹了Objective-C的一些編程書寫規(guī)范小結(jié),包括類與方法等面向?qū)ο缶幊滔嚓P(guān)的代碼編寫風(fēng)格,需要的朋友可以參考下2016-04-04
iOS實(shí)現(xiàn)滾動(dòng)字幕的動(dòng)畫特效
這篇文章給大家?guī)硪豢顟?yīng)用非常實(shí)用的控件,滾動(dòng)字幕,可以應(yīng)用在新聞、財(cái)經(jīng)、聊天等各類APP上,B格瞬間提升了一個(gè)檔次有木有,下面跟著小編一起看看如何實(shí)現(xiàn)的吧。2016-09-09

