从NSDate获得时间返回nil

时间:2012-10-04 06:33:27

标签: iphone time nsdate nsdateformatter

我想在图表上显示时间,并且我在这个@“2012-08-28 18:50:24”格式中有一个全时戳。当我试图从这个日期获得时间然后它在NSDate中返回nil。

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"HH:mm:ss"];
    NSDate *time = [formatter dateFromString:@"2012-08-28 18:50:24"];
仅当我将[formatter setDateFormat:@"HH:mm:ss"];行更改为[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];时,才会在此代码中

,然后它开始使用完整的日期和时间。但我只需要时间

6 个答案:

答案 0 :(得分:4)

你有字符串。所以你必须先按照字符串格式将它转换为日期。之后,您可以将日期转换为任何格式。所以请遵循这个。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *time = [formatter dateFromString:@"2012-08-28 18:50:24"];
[formatter setDateFormat:@"HH:mm:ss"];
NSString *str = [formatter stringfromdate:time];
NSLog(@"%@",str);

答案 1 :(得分:2)

NSDateFormatter用于根据您的要求格式化NSDate。     在这里,您从字符串中获取日期,因此您必须告诉NSDateFormatter查找具有该格式的字符串并将其转换为日期

NSDate包含日期和时间,因此如果您希望时间仅显示使用dateformatter来从NSDate获取时间组件

iOS在NSDate中一起管理时间和日期。实际上它们应该一起工作。

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];   
   // GET  Proper NSDate 
    NSDate *time = [formatter dateFromString:@"2012-08-28 18:50:24"];        
    //To your requirement
    [formatter setDateFormat:@"HH:mm:ss"];
    NSString *timestr=[formatter stringFromDate:time];
    NSLog(@"%@",timestr);

答案 2 :(得分:2)

因为,首先你需要将你的字符串转换为

的右格式中的NSDate
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *aDate = [formatter dateFromString:@"2012-08-28 18:50:24"];

现在您可以根据需要重新格式化NSDateFormatter。现在你可以从

获得时间
[formatter setDateFormat:@"HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:aDate];

答案 3 :(得分:2)

如果您需要从字符串生成日期,则需要相应地设置日期格式。

首先创建NSDate对象很重要!只有这样,您才能将时间与整个日期分开。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *time = [formatter dateFromString:@"2012-08-28 18:50:24"];

然后

[formatter setDateFormat:@"HH:mm:ss"];
NSString *timeStr = [formatter stringFromDate:time];

您还可以使用其他字符串连接功能删除日期模块,如this.

但是,如果您首先拥有NSDate,那么之前的代码将起作用。

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSString *timeStr = [formatter stringFromDate:date];

答案 4 :(得分:2)

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"hh:mm:ss  a"];
NSString *theTime = [timeFormat stringFromDate:[NSDate date]];    
NSLog(@"time, %@",theTime);

答案 5 :(得分:1)

首先,您已在日期格式中转换了字符串日期和时间..

YourTimeStr = @"2012-08-28 18:50:24";  

  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-mm-dd HH:mm:ss";
    NSDate *DateAndTime = [formatter dateFromString:LogOutTimeSTR];

然后

NSDateFormatter *dateFormatter1 = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter1 setDateFormat:@"HH:mm:ss"];
    [dateFormatter1 setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

    NSString *YourTimeStr =[dateFormatter1 stringFromDate:DateAndTime];