2

我正在尝试在图表上显示时间,并且我有一个完整的时间戳,格式为 @"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"];为时,它才会开始使用完整的日期和时间。但我只需要时间

4

6 回答 6

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);
于 2012-10-04T06:52:39.993 回答
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);
于 2012-10-04T06:49:24.710 回答
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];
于 2012-10-04T06:49:44.647 回答
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];

您还可以使用其他字符串连接函数来删除这样的日期模块

但是,如果您首先有一个 NSDate,那么您之前的代码就可以工作。

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSString *timeStr = [formatter stringFromDate:date];
于 2012-10-04T06:49:55.070 回答
2
NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"hh:mm:ss  a"];
NSString *theTime = [timeFormat stringFromDate:[NSDate date]];    
NSLog(@"time, %@",theTime);
于 2012-10-04T07:04:31.753 回答
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];
于 2012-10-04T06:51:44.740 回答