亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NSDate,NSDateFormatter以及時區轉換

發布時間:2020-07-02 10:22:16 來源:網絡 閱讀:4442 作者:dragon_cao 欄目:開發技術

NSDate是ios中的一個保存時間的對象,其中包含了時區。通過NSLog輸出的[NSDate date]是GTM時區的時間,是0時區。而中國大陸采用的是正8區。

NSLog(@"GTM 時間:%@",[NSDate date]);

2013-07-09 15:16:38.007 demo[14267:13d03] GTM 時間:2013-07-09 07:16:38 +0000

通過NSDateFormatter將NSDate類的對象輸出設置好的格式。NSDateFormatter采用ios操作系統的時區作為默認值。操作系統的時區通過[[NSTimeZone localTimeZone] name]獲取到。

   NSLog(@"[[NSTimeZone localTimeZone] name] is %@",[[NSTimeZone localTimeZone] name]);


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


   [dateFormatter setDateFormat:@"YYYY-MM-d HH:mm:ss"];

將NSDateFormatter對象的時區設置"Asia/Shanghai" ,為正8區,輸出結果就是我們現在看到的時間

   [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];

   NSString *dStr = [dateFormatter stringFromDate:[NSDate date]];

   NSLog(@"時區:%@ 當地時間:%@",[[dateFormatter timeZone] name], dStr);

   將NSDateFormatter對象的時區設置"GMT" ,為0區,輸出結果就是看到[NSDate date]的值。
   [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
   dStr = [dateFormatter stringFromDate:[NSDate date]];

   NSLog(@"時區:%@ 當地時間:%@",[[dateFormatter timeZone] name], dStr);


將NSDateFormatter對象的時區設置"Asia/Tokyo" ,為正9區,輸出結果就是日本用戶看到的時間
   [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]];
   dStr = [dateFormatter stringFromDate:[NSDate date]];

   NSLog(@"時區:%@ 當地時間:%@",[[dateFormatter timeZone] name], dStr);    


可以看到,NSDateFormatter根據時區設置,將時間進行調整。 如果加上時區的前者調整,其實是和GTM的時間是一致的。

NSDateFormatter也僅僅是將時間按照不同時區的設置進行顯示,NSLog(@"GTM 時間:%@",[NSDate date]);是在GTM時區下顯示時間。因此如果你看到的時間比本地時區顯示的時間有差異,加了多少小時,或者減了多少小時。

這點,在所有的計算機系統中都是一樣的,包括linux ,windows,solaris,aix等等。

NSDateFormatter也可以將指定格式的字符串轉換為NSDate。這是其他語言中常見的時間轉字符串,字符串轉時間的操作方法。在ios的objective-c開發中,使用NSDateFormatter類來實現。不過,這里加了一點,時區。如果不加,就是系統默認值。

   [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];

   NSDate *dateFormatted=[dateFormatter dateFromString:@"2013-07-09 12:00:00"];

   NSLog(@"GTM 時間:%@",dateFormatted);

   [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]];

    dateFormatted=[dateFormatter dateFromString:@"2013-07-09 12:00:00" ];

   NSLog(@"GTM 時間:%@",dateFormatted);

   [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

   dateFormatted=[dateFormatter dateFromString:@"2013-07-09 12:00:00"];

   NSLog(@"GTM 時間:%@",dateFormatted);




接著講NSCalendar。

NSCalendar是ios中的一個保存日歷數據的對象,其中也有時區設置,道理和NSDate一樣的。NSCalendar可以將NSDate對象在日歷中是一些屬性特征顯示出來。NSCalendar根據設置的時區進行計算,將NSDate對象是一年中的第幾周,一個月中的第幾周等等計算出來。

NSCalendar還涉及到一個類NSDateComponents,兩者結合,可以將某些屬性拆分出來,也可以通過它來設置NSDate,也可以實現NSDate的加減和比較運算。

NSDateComponents也可以設置時區,設置年月日時分秒。

NSCalendar *localCalendar= [NSCalendar currentCalendar];

unsigned unitFlags = NSTimeZoneCalendarUnit|NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;

unitFlags是一個設置,表示NSDateComponents會保存那些屬性,一般是時分秒天月年等等,還有星期幾,哪個季度,哪個月度,這里將時區也一并保存了。
   NSDateComponents *comps = [localCalendar components:unitFlags fromDate:[NSDate date]];


   NSLog(@"時區:%@ hour is %d",[[comps timeZone] name] ,comps.hour);


同樣,也可以通過NSDateComponents設置得到一個NSDate對象。

   [comps setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Tokyo"]];

   [comps setSecond:00];
   [comps setMinute:00];
   [comps setHour:12];

   [comps setDay:9];
   [comps setMonth:7];
   [comps setYear:2013];

   NSLog(@"時區:%@ hour is %d",[[comps timeZone] name] ,comps.hour);

   NSDate *compsDate=[localCalendar dateFromComponents:comps];

   NSLog(@"GTM 時間:%@",compsDate);



總之,理解透了,也就這么回事。將時區理解成日期時間的另一個屬性。像大陸的下午兩點和美國的下午兩點,不是一個時間,因為還有時區這個前提條件存在。


測試結果如下:

2013-07-09 15:16:38.006 demo[14267:13d03] test begin.....................
2013-07-09 15:16:38.007 demo[14267:13d03] GTM 時間:2013-07-09 07:16:38 +0000
2013-07-09 15:16:38.007 demo[14267:13d03] [[NSTimeZone localTimeZone] name] is Asia/Shanghai
2013-07-09 15:16:38.008 demo[14267:13d03] 時區:Asia/Shanghai 當地時間:2013-07-9 15:16:38
2013-07-09 15:16:38.008 demo[14267:13d03] 時區:GMT 當地時間:2013-07-9 07:16:38
2013-07-09 15:16:38.009 demo[14267:13d03] GTM 時間:2012-07-09 04:00:00 +0000
2013-07-09 15:16:38.009 demo[14267:13d03] GTM 時間:2012-07-09 03:00:00 +0000
2013-07-09 15:16:38.009 demo[14267:13d03] GTM 時間:2012-07-09 12:00:00 +0000
2013-07-09 15:16:38.010 demo[14267:13d03] the end.....................
2013-07-09 15:16:38.010 demo[14267:13d03] ...............................
2013-07-09 15:16:38.010 demo[14267:13d03] test begin.....................
2013-07-09 15:16:38.010 demo[14267:13d03] 時區:Asia/Shanghai hour is 15
2013-07-09 15:16:38.011 demo[14267:13d03] 時區:Asia/Tokyo hour is 12
2013-07-09 15:16:38.011 demo[14267:13d03] GTM 時間:2013-07-09 03:00:00 +0000
2013-07-09 15:16:38.011 demo[14267:13d03] the end.....................

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳朔县| 梅州市| 泸西县| 潢川县| 灯塔市| 枣强县| 闻喜县| 乌苏市| 本溪市| 固始县| 黄浦区| 镶黄旗| 牙克石市| 金湖县| 虹口区| 新巴尔虎左旗| 神池县| 全南县| 昌吉市| 溧阳市| 盐亭县| 北川| 烟台市| 扶风县| 尼勒克县| 商丘市| 高陵县| 洛浦县| 徐水县| 奎屯市| 都江堰市| 米泉市| 无棣县| 尼玛县| 开封县| 梧州市| 伊春市| 拜泉县| 惠水县| 桐梓县| 江川县|