【问题标题】:Why does my NSDate (only time part) string format not able to convert to long?为什么我的 NSDate(仅时间部分)字符串格式无法转换为长字符串?
【发布时间】:2015-04-27 12:11:43
【问题描述】:

我从 UIDatePicker 获取输入,我的输出是这种格式 3:24:00 AM 但是当我尝试将其转换回 NSDate 并从那里返回一个空值时。

我的代码:

    NSDate* sourceDate = self.timePicker.date;

    NSString *dateString = [NSDateFormatter localizedStringFromDate:sourceDate
                                                          dateStyle:NSDateFormatterNoneStyle
                                                          timeStyle:NSDateFormatterMediumStyle];
    NSLog(@"%@",dateString);   //3:25:00 AM  string value

将 dateString 转换为 NSDate

    NSDate *dateVal=(NSDate *)dateString;
    NSLog(@"%@", dateVal); // printing null in console

将 dateVal 转换为 long

    long val=[d timeIntervalSince1970]*1000;
    NSLog(@"%ld",val); // printing 0

我该如何解决这个问题?请帮帮我

我期望 NSDate 的时间部分的值很长

【问题讨论】:

  • 因为您的d 值为零。
  • 将 dateString 转换为 NSDate :您不能直接将 NSString 转换为 NSDate 您需要使用 DateFormatter。您对将 dateString 转换为 NSDate 有何期望?
  • 好吧,如果它不是 nil(由于上面代码中没有显示的原因),那么你会得到“无法识别的选择器”,因为 timeIntervalSince1970 不是 NSString 的方法。
  • NSDate *dateVal=(NSDate *)dateString; Casting 未转换。它所做的只是告诉编译器关闭。
  • 这些问题被回答了数千次。搜索它。

标签: ios objective-c nsdate uidatepicker


【解决方案1】:

// 将字符串转换为日期对象

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *date = [dateFormat dateFromString:dateStr];  

这将帮助您将 dateString 转换为 NSDate

【讨论】:

  • 再次搜索此站点。在您之前有数百人认为他们得到了错误的输出,因为他们不了解 NSDate。
【解决方案2】:

您需要以下内容:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:NSLocaleIdentifier]];
[df setDateFormat:@"h:m:s a"];
NSDate *myDate = [df dateFromString:dateString];

您需要将字符串转换为 NSDate 对象。一个简单的方法是使用 NSDateFormatter 对象。它提供了 dateFromString 方法,将字符串转换为 NSDate 对象。但是,您确实需要告诉 NSDateFormatter 日期的格式。

日期格式化参考:

 a           AM/PM
 A           millisecond of day
 c           day of week (c,cc,ccc,cccc)
 d           day of month
 e           day of week (e,EEE,EEEE)
 F           week of month
 g           julian day (since 1/1/4713 BC)
 G           era designator (G=GGG,GGGG)
 h           hour (1-12, zero padded)
 H           hour (0-23, zero padded)
 L           month of year (L,LL,LLL,LLLL)
 m           minute of hour (0-59, zero padded)
 M           month of year (M,MM,MMM,MMMM)
 Q           quarter of year (Q,QQ,QQQ,QQQQ)
 s           seconds of minute (0-59, zero padded)
 S           fraction of second
 u           zero padded year
 v           general timezone (v=vvv,vvvv)
 w           week of year (0-53, zero padded)
 y           year (y,yy,yyyy)
 z           specific timezone (z=zzz,zzzz)
 Z           timezone offset +0000

 sql         y-M-d H:m:s
 rss         [E, ]d MMM y[y] H:m:s Z|z[zzz]

【讨论】:

  • 我试过但输出日期错误。让我再试一次
  • 你得到了什么输出?
  • 因为你从[NSDateFormatter localizedStringFromDate:sourceDate dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterMediumStyle];得到的确切字符串不是3:25:00 AM
  • 现在工作...当我选择 06:39 am 得到这个 2000-01-01 06:39:51
  • 是的,但我猜数据不正确,因为2000-01-01
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
相关资源
最近更新 更多