2016-05-12 38 views
0

我想從一個字符串,看起來像@"2016-05-12T16:25:55.000Z"時間。我已經試過這樣的事情:解析時間從NSDate

NSDateFormatter *formatter = [NSDateFormatter new]; 
formatter.dateFormat  = @"HH:mm"; 
formatter.timeZone   = [NSTimeZone systemTimeZone]; 

NSDate *serverDate = [formatter dateFromString:dateString]; 
NSString* time = [formatter stringFromDate:serverDate]; 
NSLog(@"Time: %@", time); 

但我serverDate將返回null。我不知道我做錯了什麼。

回答

2

當您從NSString創建NSDate時,日期格式必須完全匹配整個字符串。

但是看起來你的目標是把時間看作一個字符串。所以只要得到子字符串:

NSString *time = [dateString substringWithRange:NSMakeRange(11, 5)]; 

當然,這並不以任何方式處理時區。如果您希望將原始字符串解析爲NSDate,然後從該日期獲取所有需要時區調整的時間,則需要兩種日期格式。一個將原始字符串解析爲一個NSDate和第二個(您已經擁有的那個),以生成具有所需輸出的新字符串(本例中爲該時間)。

+0

謝謝。你的組合方法工作得很好。 – BlackHatSamurai

0

您可以將格式化程序的dateFormat屬性設置爲:@"yyyy-MM-dd'T'HH:mm:ssZ",然後使用NSDateComponents獲取時間值。

+0

您的格式與問題中的字符串不匹配。 – rmaddy

0

首先轉換您的日期NSDate的

+ (NSDate *) convertDateToNSDateWithGivenFormat: (NSString *) dateStr Format:(NSString*) format 
{ 
    NSDateFormatter *dateFormatterDate = nil; 
    NSDate *dateonly = nil; 

    if (dateFormatterDate == nil) { 
     dateFormatterDate = [[NSDateFormatter alloc] init]; 
     [dateFormatterDate setDateFormat:format]; 
    } 
    dateonly = [dateFormatterDate dateFromString:[NSString stringWithFormat:@"%@", dateStr]]; 

    return dateonly; 
} 

然後使用NSDate的變量分裂的日期和時間

+ (NSString *) GetFormattedTimeStringForGivenDate:(NSDate *) date 
{ 
    NSString *retStr = nil; 
    NSDate *now = date; 
    NSDateFormatter *dateFormatterDateOnly = nil; 
    NSDateFormatter *dateFormatterTimeOnly = nil; 

    if (dateFormatterDateOnly == nil) { 
     dateFormatterDateOnly = [[NSDateFormatter alloc] init]; 
     [dateFormatterDateOnly setDateFormat:@"MM/dd/yyyy"]; 
    } 
    if (dateFormatterTimeOnly == nil) { 
     dateFormatterTimeOnly = [[NSDateFormatter alloc] init]; 
     [dateFormatterTimeOnly setDateFormat:@"hh:mm:ss:a"]; 
    } 
    //if you need date use this 
    //retStr = [NSString stringWithFormat:@"%@", [dateFormatterDateOnly stringFromDate:now]]; 
    retStr = [NSString stringWithFormat:@"%@", [dateFormatterTimeOnly stringFromDate:now]]; 
    return retStr; 
} 

這裏是例子。您可以根據需要更改格式:

NSDate *myDt = [MyClass convertDateToNSDateWithGivenFormat: @"2016-05-12T16:25:55" Format:@"yyyy-MM-dd'T'HH:mm:ss"]; 
    NSString *str = [MyClass GetFormattedTimeForGivenDate:myDt];