2011-09-26 30 views
-1

我試圖從sqlite中獲取NSString的NSDate對象,但是有時間問題。我每次需要130ms。因爲我有兩百件物品需要處理,所以這是無法忍受的。那麼有人可以告訴我我該怎麼做。謝謝。如何快速將NSString對象轉換爲NSDate?

+2

請給我們看你的代碼。你每次創建一個新的'NSDateFormatter'嗎?初始化日期格式化程序的代價很高,因此只應該只執行一次,並在輸入格式不更改的情況下重用它。 –

回答

4

假設您使用的是NSDateFormatter,您應該注意Apple的建議,緩存格式化程序以提高效率。每次要轉換日期時,都應該保留NSDateFormatter的單個實例,而不是創建NSDateFormatter。從Data Formatting guide

緩存格式化程序對效率

創建的日期格式是不是一個便宜的操作。如果您很可能經常使用格式化程序 ,那麼緩存 單個實例比創建和處理多個實例通常更高效。 一種方法是使用靜態變量。

+0

我正在使用NSDateFormatter並每次創建它。當我使用全局NSDateFormatter對象時,只需88ms即可轉換20個NSString對象。非常感謝你! – wcrane

0
NSDateFormatter *formatter=[[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"HH:mm:ss:SSS"]; 
    NSDate *currentdate=[formatter dateFromString:currentdateStr]; 
//it returns DateObject If String in Specified Format otherwise Returns nil; 
0

我覺得這個代碼塊將幫助您:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"<Add Your Date Format>"]; 

     NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

     NSDateComponents *dateComponent = [calendar components:NSYearCalendarUnit 
             |NSMonthCalendarUnit 
             |NSDayCalendarUnit 
             fromDate:[dateFormatter dateFromString: <Add Your Date String> ]]; 

     [dateComponent setHour:24]; 
     [dateComponent setMinute:00]; 
     [dateComponent setSecond:00]; 

     <Your NSDate Object> = [calendar dateFromComponents:dateComponent]; 

這可能需要改變dateComponent值時,分,秒 - 根據您的日曆時間。

讓我知道你是否面臨任何問題..