一、 Unix 時間戳爲什麼是自 1970 年 1 月 1 日起的絕對時間? 那麼,1970年之前的時間如何用Unix時間戳表示?
1、 因爲Unix就是那個時代產生的。
Unix是1969年發佈的雛形,最早是基於硬件60Hz的時間計數。
1971年底出版的《Unix Programmer's Manual》裏定義的Unix Time是以1971年1月1日00:00:00作爲起始時間,每秒增長60。
之後考慮到32位整數的範圍,如果每秒60個數字,則兩年半就會循環一輪了。於是改成了以秒爲計數單位。
這個循環週期有136年之長,就不在乎起始時間是1970還是1971年了,於是就改成了人工記憶、計算比較方便的1970年了。
2、因爲unix時間戳是一個有符號整數,所以1970年前一百年可以用其負數部分表示。
但事實上很少這要使用。因爲unix時間戳主要用來表示當前時間或者和電腦有關的日誌時間(如文件創立時間,log發生時間等)。
考慮到所有電腦文件不可能在1970年前創立,所以用unix時間戳很少用來表示1970前的時間。
當需要表示以前的時間,一般就是自己定義數據結構。比如你可以用幾個數分別表示年月日,或者像excel中用1900年1月1日後的天數表示時間。
二、下面是iOS中時間戳 與 時間之間的轉換方法:
1、把時間轉換爲時間戳:::
NSDate *localDate = [NSDate date]; //獲取當前時間
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[localDate timeIntervalSince1970]]; //轉化爲UNIX時間戳
NSLog(@"timeSp:%@",timeSp); //時間戳的值
也有這樣寫的:::
NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];
NSTimeInterval a=[dat timeIntervalSince1970]*1000; // *1000 是精確到毫秒,不乘就是精確到秒
NSString *timeString = [NSString stringWithFormat:@"%f", a]; //轉爲字符型
懶的話就一句話:
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]];
或者直接c語言函數time(NULL)就可以了
NSLog(@"%ld", time(NULL)); // 這句也可以獲得時間戳,跟上面一樣,精確到秒
2、把時間戳轉換爲時間:::
NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:1363948516];
NSLog(@"1363948516 = %@",confromTimesp); //之後就可以對NSDate進行格式或處理