android 时间戳 时区,三句话理解时区与时间戳
從不浪費(fèi)時(shí)間的人,沒有工夫抱怨時(shí)間不夠。 —— 杰弗遜
第一句話:時(shí)間戳
時(shí)間不分東西南北、在地球的每一個(gè)角落都是相同的。他們都有一個(gè)相同的名字,叫時(shí)間戳。時(shí)間戳 指的就是Unix時(shí)間戳(Unix timestamp)。它也被稱為Unix時(shí)間(Unix time)、POSIX時(shí)間(POSIX time),是一種時(shí)間表示方式,定義為從格林威治時(shí)間1970年01月01日00時(shí)00分00秒起至現(xiàn)在的總秒數(shù)。
關(guān)于 時(shí)間戳, 你可以看在線時(shí)間戳
第二句話:時(shí)區(qū)
時(shí)間戳 在地球的每一個(gè)角落都是相同的,但是在相同的時(shí)間點(diǎn)會有不同的表達(dá)方式,所以有了另外一個(gè)時(shí)間概念,叫時(shí)區(qū)。這里的時(shí)區(qū)與地區(qū)不是同一個(gè)概念,例如我們所在的時(shí)區(qū)叫 東八區(qū) 。
在設(shè)備中,可以自己手動的切換當(dāng)前的系統(tǒng)時(shí)區(qū):
時(shí)區(qū)設(shè)置
你會發(fā)現(xiàn):當(dāng)你選在不同的時(shí)區(qū),你的當(dāng)前時(shí)間是不一樣的。
第三句話:時(shí)間戳與時(shí)區(qū)在Code中應(yīng)用
一、時(shí)間戳 是不會跟著 時(shí)區(qū) 的改變而改變
可以用代碼來證明這一點(diǎn):
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 系統(tǒng)時(shí)區(qū)
NSTimeZone* timeZone = [NSTimeZone systemTimeZone];
NSLog(@"系統(tǒng)當(dāng)前的時(shí)區(qū): %@", timeZone.name);
// 返回的單位是 秒
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970] ;
NSLog(@"當(dāng)前時(shí)間戳:%f", timeInterval);
}
你會發(fā)現(xiàn),不管怎么切換時(shí)區(qū),時(shí)間戳總是一致。可以實(shí)時(shí)的參照在線時(shí)間戳進(jìn)行驗(yàn)證。
二、不同 時(shí)區(qū) 間的時(shí)間切換
這個(gè)需求并不是空穴來風(fēng),在很多的app中都會用到的。比如根據(jù)服務(wù)器返回的時(shí)間與當(dāng)前時(shí)間進(jìn)行一個(gè)比較,這里就會有多種可能性,主要體現(xiàn)在服務(wù)器返回時(shí)間的方式,比如直接返回一個(gè)固定時(shí)間的字符串,比如:2017-06-14 22:55:23。然后接口的同事告訴你這個(gè)是 東八區(qū) 時(shí)間。讓你自己轉(zhuǎn)成當(dāng)前 時(shí)區(qū) 的時(shí)間。
1、將當(dāng)前 時(shí)區(qū) 的時(shí)間轉(zhuǎn)成不同 時(shí)區(qū) 的時(shí)間
不管當(dāng)前設(shè)備的 時(shí)區(qū) 在什么地方,都將其轉(zhuǎn)成 東八區(qū) 的時(shí)間格式。代碼如下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 系統(tǒng)時(shí)區(qū),默認(rèn)就是當(dāng)前的時(shí)區(qū)
NSTimeZone* timeZone = [NSTimeZone systemTimeZone];
NSLog(@"系統(tǒng)當(dāng)前的時(shí)區(qū): %@", timeZone.name);
// 獲取當(dāng)前時(shí)間
NSDate* date = [NSDate date];
// 時(shí)間格式
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString* now = [dateFormatter stringFromDate:date];
NSLog(@"系統(tǒng)當(dāng)前時(shí)間顯示: %@", now);
// 將時(shí)區(qū)設(shè)置成 東八區(qū)
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8*3600]];
// 設(shè)置后的時(shí)間顯示
now = [dateFormatter stringFromDate:date];
NSLog(@"東八區(qū)的當(dāng)前時(shí)間顯示: %@", now);
}
打印結(jié)果如下:
打印完美結(jié)果
2、2017-06-08T11:29:29.209Z
當(dāng)有一天你發(fā)現(xiàn)服務(wù)器返回這樣的時(shí)間,請不要束手無策,因?yàn)檫@個(gè)時(shí)間格式就已經(jīng)明確的將時(shí)區(qū)也告訴你了,你只需要這樣做,就能隨時(shí)隨地的轉(zhuǎn)成當(dāng)前時(shí)區(qū)的時(shí)間格式:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 時(shí)間字符串 (帶有時(shí)區(qū)信息)
NSString* timeTEXT = @"2017-06-08T11:29:29.209Z";
// 對應(yīng)時(shí)間格式
NSString* formateTEXT = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formateTEXT];
// 獲取當(dāng)前對應(yīng)時(shí)區(qū)的時(shí)間
NSDate* curDate = [dateFormatter dateFromString:timeTEXT];
NSLog(@"對應(yīng)當(dāng)前時(shí)區(qū)的時(shí)間: %@", curDate);
}
上面的代碼,沒有看到有 時(shí)區(qū) 間的切換,但是是正確的。因?yàn)閠imeTEXT已經(jīng)自帶時(shí)區(qū) 信息。然而 NSDateFormatter 對象默認(rèn)是當(dāng)前設(shè)備的 時(shí)區(qū)。所以 curDate 就是當(dāng)前設(shè)備的時(shí)間。
3、想了一下,沒有其它的需要補(bǔ)充了,都太簡單。
謝謝~
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的android 时间戳 时区,三句话理解时区与时间戳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。