iOSNSDate中關(guān)于夏令時(shí)的示例分析

小編給大家分享一下iOS NSDate中關(guān)于夏令時(shí)的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、神池網(wǎng)站維護(hù)、網(wǎng)站推廣。

前言

最近線上推廣項(xiàng)目的時(shí)候,運(yùn)營(yíng)反饋了幾個(gè)bug,其中一個(gè)就是字符串轉(zhuǎn)NSDate對(duì)象出現(xiàn)nil的情況。

舉個(gè)例子:

NSString *timeStr = @"1992-04-05";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate * date1 = [formatter dateFromString:timeStr];
NSLog(@"timeStr to date is %@ %@", timeStr, date1);

這里的timeStr就是用戶的生日,平時(shí)測(cè)試的時(shí)候,這塊代碼都是ok的。那么如果我們把生日換成1986-05-04,此時(shí)的date就會(huì)轉(zhuǎn)化失敗,為null。

經(jīng)查找資料,發(fā)現(xiàn)這個(gè)情況是由于夏令時(shí)引起的。

夏時(shí)令(Daylight Saving Time:DST),又稱(chēng)“日光節(jié)約時(shí)制”和“夏令時(shí)間”,是一種為節(jié)約能源而人為規(guī)定地方時(shí)間的制度,在這一制度實(shí)行期間所采用的統(tǒng)一時(shí)間稱(chēng)為“夏令時(shí)間”。一般在天亮早的夏季人為將時(shí)間調(diào)快一小時(shí),可以使人早起早睡,減少照明量,以充分利用光照資源,從而節(jié)約照明用電。各個(gè)采納夏時(shí)制的國(guó)家具體規(guī)定不同。目前全世界有近110個(gè)國(guó)家每年要實(shí)行夏令時(shí)。

1986年4月,中國(guó)中央有關(guān)部門(mén)發(fā)出“在全國(guó)范圍內(nèi)實(shí)行夏時(shí)制的通知”,具體作法是:每年從四月中旬第一個(gè)星期日的凌晨2時(shí)整(北京時(shí)間),將時(shí)鐘撥快一小時(shí),即將表針由2時(shí)撥至3時(shí),夏令時(shí)開(kāi)始;到九月中旬第一個(gè)星期日的凌晨2時(shí)整(北京夏令時(shí)),再將時(shí)鐘撥回一小時(shí),即將表針由2時(shí)撥至1時(shí),夏令時(shí)結(jié)束。從1986年到1991年的六個(gè)年度,除1986年因是實(shí)行夏時(shí)制的第一年,從5月4日開(kāi)始到9月14日結(jié)束外,其它年份均按規(guī)定的時(shí)段施行。在夏令時(shí)開(kāi)始和結(jié)束前幾天,新聞媒體均刊登有關(guān)部門(mén)的通告。1992年起,夏令時(shí)暫停實(shí)行。

  • 1986年4月13日至9月14日

  • 1987年4月12日至9月13日

  • 1988年4月10日至9月11日

  • 1989年4月16日至9月17日

  • 1990年4月15日至9月16日

  • 1991年4月14日至9月15日

以上時(shí)間段都屬于夏令時(shí),但是經(jīng)過(guò)多次測(cè)試,這其中有的日子是可以轉(zhuǎn)化為NSDate的,目前只發(fā)現(xiàn)了6個(gè)日期會(huì)有問(wèn)題。1991-04-14, 1986-05-04, 1987-04-12, 1989-04-16, 1990-04-15,1988-04-10(ps:沒(méi)有做覆蓋測(cè)試,可能還有更多)

解決方案:

一、使用GMT零時(shí)區(qū)

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];// 零時(shí)區(qū)
[formatter setDateFormat:@"yyyy-MM-dd"];

二、設(shè)置lenient屬性

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.lenient = YES; // 這個(gè)屬性沒(méi)有官方的解釋?zhuān)瑐€(gè)人理解為:如果當(dāng)前時(shí)間不存在的話,會(huì)默認(rèn)獲取距離最近的整點(diǎn)時(shí)間
[formatter setDateFormat:@"yyyy-MM-dd"];

iOS 時(shí)間字符串&NSDate&時(shí)間戳 相互轉(zhuǎn)換

前段時(shí)間一直在和時(shí)間打交道,這幾天整理了一下幾個(gè)時(shí)間相互轉(zhuǎn)換的方法,再次做記錄

效果圖

iOS NSDate中關(guān)于夏令時(shí)的示例分析

iOS NSDate中關(guān)于夏令時(shí)的示例分析

時(shí)間戳轉(zhuǎn)字符串

+(NSString *)timeStampConversionNSString:(NSString *)timeStamp
{
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStamp longLongValue]/1000];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *dateStr = [formatter stringFromDate:date];
return dateStr;
}

時(shí)間轉(zhuǎn)時(shí)間戳

+(NSString *)dateConversionTimeStamp:(NSDate *)date
{
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[date timeIntervalSince1970]*1000];
return timeSp;
}

字符串轉(zhuǎn)時(shí)間

+(NSDate *)nsstringConversionNSDate:(NSString *)dateStr
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate *datestr = [dateFormatter dateFromString:dateStr];
return datestr;
}

以上是“iOS NSDate中關(guān)于夏令時(shí)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

名稱(chēng)欄目:iOSNSDate中關(guān)于夏令時(shí)的示例分析
網(wǎng)站URL:http://m.kartarina.com/article2/jeceoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈自適應(yīng)網(wǎng)站、小程序開(kāi)發(fā)、App開(kāi)發(fā)、Google、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
主站蜘蛛池模板: 精品久久久久久久无码| 国模GOGO无码人体啪啪| 亚洲AV永久纯肉无码精品动漫| 无码AV动漫精品一区二区免费| 国产成人亚洲综合无码| av潮喷大喷水系列无码| 本免费AV无码专区一区| 无码熟妇人妻AV在线影院| 亚洲AV无码一区二区三区国产 | 69成人免费视频无码专区| 成在线人免费无码高潮喷水| 亚洲中文字幕无码爆乳app| 中文精品无码中文字幕无码专区| 精品久久久久久久无码久中文字幕 | 午夜福利av无码一区二区| 色视频综合无码一区二区三区| 日韩精品无码免费一区二区三区| 国产高新无码在线观看| 精品无码久久久久久久久水蜜桃| 精品久久久久久久无码| 无码人妻精品一区二区三区久久| 黄色成人网站免费无码av| AA区一区二区三无码精片| 久久久久亚洲AV成人无码| 亚洲VA中文字幕无码一二三区| 亚洲av无码成人精品区在线播放 | 亚洲av无码一区二区三区在线播放| 丰满日韩放荡少妇无码视频| 亚洲区日韩区无码区| 精品一区二区三区无码免费直播| 久久亚洲AV成人无码国产电影 | 精品无码av无码专区| 激情无码亚洲一区二区三区| 97在线视频人妻无码| 国产精品无码制服丝袜| 精品少妇人妻av无码专区| 国产精品无码专区在线播放| 国产精品亚洲专区无码不卡| 亚洲AV永久无码精品一区二区国产| 日韩毛片无码永久免费看| 国产成人亚洲综合无码|