IOS NSDate从string只有时间

我的任务是parsingstring与NSDate的时间。 我用下面的代码做得很好:

NSString* timeStr = @"15:00:00" NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; [formatter setDateFormat:@"HH:mm:ss"]; NSDate* result = [formatter dateFromString:timeStr]; 

但结果我得到2000-01-01 15:00:00 CET ,我不明白为什么date设置为2000-01-01 ,而不是2001-01-01 (这是参考date)或1970-01-01 。 而2000-01-01似乎不是随机值… 🙂

如果你想要它只是一个date部分的string,只需使用一个dateFormatter,类似于你之前做的。

 NSString* timeStr = @"15:00:00"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; [formatter setDateFormat:@"HH:mm:ss"]; NSDate* result = [formatter dateFromString:timeStr]; [formatter setDateFormat:@"YYYY-MM-DD"]; timeStr = [formatter stringFromDate:result]; 

或者你需要直接在date格式化程序中设置datestring,这是因为如果你在date格式化程序中指定时间string,你会得到date和时间string的组合

  NSString* dateStr = @"2001-01-01"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; [formatter setDateFormat:@"YYYY-MM-DD"]; NSDate* result = [formatter dateFromString:dateStr]; 

你没有在时间之外传递任何信息。 因此,您的NSDate中的任何其他值都是未定义的。