2014-09-29 49 views
0

我有以下代碼:減法轉換的NSString和NSDate的

NSString *startDate = @"2014-09-29 05:46:34 +000"; 

// Format the string 
NSRange range = NSMakeRange(0, 19); 
startDate = [startDate substringWithRange:range]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *dateFromString = [[NSDate alloc] init]; 
dateFromString = [dateFormatter dateFromString:startDate]; 

NSDate *trendDate = [dateFromString dateByAddingTimeInterval:-3600*12]; 

NSString *dateString = [NSString stringWithFormat:@"%@", trendDate]; 

我的日期字符串,然後結束爲:

@"2014-09-29 00:46:34 +000"; 

爲什麼只minusing5小時而不是12?

+2

您應該使用NS DateComponents,而不是使用'NSDate'的'dateByAddingTimeInterval:'。另外你在時區中有7小時的差異,因爲你沒有計算'NSString'原始日期的時區。在添加時間之前打印了「dateFromString」是什麼? – Larme 2014-09-29 05:58:15

+0

我看到我比格林威治標準時間晚7個小時,其中傳入的日期是。一旦我將當前日期設置爲GMT,它可以正常工作。 – cdub 2014-09-29 06:13:57

+0

除了你的問題,你可能會發現這些類別有用:http://journeytoios.wordpress.com/2014/09/05/nsdate-vs-nsstring-vice-versa/ – NeverHopeless 2014-09-29 06:18:46

回答

0

它,因爲你是從日期字符串就是爲什麼你得到錯誤的日期移除時區

而不是從您的日期字符串中刪除+000只是替換您的日期合成。

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

隨着

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; 

刪除代碼

NSRange range = NSMakeRange(0, 19); 
startDate = [startDate substringWithRange:range]; 

終極密碼

NSString *startDate = @"2014-09-29 05:46:34 +000"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; 
NSDate *dateFromString = [[NSDate alloc] init]; 
dateFromString = [dateFormatter dateFromString:startDate]; 

NSDate *trendDate = [dateFromString dateByAddingTimeInterval:-(3600*12)]; 
1

非但沒有從的startDate串子的,試試這個日期格式:

dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ" 

然後

dateFromString = [dateFormatter dateFromString:startDate]; 

NSDate *trendDate = [dateFromString dateByAddingTimeInterval:-3600*12]; 

NSString *dateString = [dateFormatter stringFromDate:trendDate];