【问题标题】:Get time from NSDate returns nil从 NSDate 获取时间返回 nil
【发布时间】:2012-10-04 06:33:26
【问题描述】:

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

【问题讨论】:

  • 嘿,亲爱的,只保存使用 NSDate 的 NSTimeInterval insted 的时间.. :)
  • 我不明白?绘制一个可以使用 NSDate 本身的图表 为什么要单独寻找时间?
  • @LithuT.V 感染我必须根据时间而不是日期来绘制

标签: iphone time nsdate nsdateformatter


【解决方案1】:

你有字符串。所以您必须先根据您的字符串格式将其转换为日期。之后,您可以将日期转换为任何格式。所以按照这个。

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);

【讨论】:

    【解决方案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);
    

    【讨论】:

      【解决方案3】:

      因为,首先你需要将你的字符串转换为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];
      

      【讨论】:

        【解决方案4】:

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

        首先创建一个 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];
        

        【讨论】:

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

          【讨论】:

            【解决方案6】:

            首先你已经在日期格式中转换了你的字符串日期和时间..

            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];
            

            【讨论】:

            • 为什么需要 2 个日期格式化程序?你可以使用第一个本身??
            • @LithuT.V 第一个日期格式是使用日期字符串值转换日期。使用后第二个是使用转换所需格式的日期值。
            • 看到这里你定义了 2 个 dateformatters-formatter 和 dateformatter1。这有什么需要? “格式化程序”可用于转换为日期,然后将其设置为新的格式和时区,以便下次转换为字符串。这还不够吗?
            • @LithuT.V 是的,我知道,但你可以用不同的 -2 类型编写一个代码,这不是问题。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-09-07
            • 1970-01-01
            • 1970-01-01
            • 2015-08-12
            • 2023-04-01
            • 2023-03-14
            • 1970-01-01
            相关资源
            最近更新 更多