繁体   English   中英

- [NSDateFormatter dateFromString:]返回nil

[英]-[NSDateFormatter dateFromString:] returns nil

    NSString *lower = [NSString stringWithFormat:@"%@",[newDates objectAtIndex:0]];
    NSString *higher = [NSString stringWithFormat:@"%@",[newDates objectAtIndex:[newDates count]-1]];
    NSLog(@"%@",lower);
    NSLog(@"%@",higher);

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"yyyy-MM-dd"];
    NSDate *dtLower = [df dateFromString:lower];

    NSDate *dtHigher = [df dateFromString:higher];
    [df release];
    NSDateFormatter *df1 = [[NSDateFormatter alloc] init];
    [df1 setDateFormat:@"yyyy-MM-dd"];
    NSString * lowerDate = [df1 stringFromDate:dtLower];
    NSString * higherDate = [df1 stringFromDate:dtHigher];
    UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 31, self.view.frame.size.width, 30)];
    [dateLabel setTextColor:[UIColor grayColor]];
    dateLabel.text = [NSString stringWithFormat:@"%@ - %@",lowerDate,higherDate];
    [self.view addSubview:dateLabel];

Console中lowerhigher输出为:

2011-05-23 14:55:52.767 Vocab[4225:207] 2011-05-23 03:58:22
2011-05-23 14:55:53.781 Vocab[4225:207] 2011-05-23 07:14:56

这里的代码对我不起作用。 higherlower的值不是null但是当我尝试使用NSDateFormatter将其转换为NSDate时,它返回nil。

所以dtLowerdtHigher回报为零

可能有什么不对?

尝试设置[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

 [df setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

你的第一个日期格式是错误的。

如果您正在使用用户可见日期 ,则应避免设置日期格式字符串,因为很难预测在所有可能的用户配置中如何表示格式字符串。 相反,你应该尝试限制自己设置日期和时间样式(通过-[NSDateFormatter setDateStyle:]-[NSDateFormatter setTimeStyle:])

如果您正在使用固定格式的日期 ,则应首先将日期格式化程序的区域设置设置为适合您的固定格式的区域设置。 在大多数情况下,最佳选择的语言环境是en_US_POSIX ,这是一种专门设计用于产生美国英语结果的语言环境,无论用户和系统偏好如何。 en_US_POSIX在时间和机器之间也是不变的( en_US_POSIX在iOS上和在OSX上的工作方式相同,就像在其他平台上一样)。

en_US_POSIX设置为日期格式化程序的语言环境后,可以设置日期格式字符串,日期格式化程序将对所有用户保持一致。

以上信息和更多内容可以在Apple的技术问答QA1480中找到

这是一段代码,它实现了上述技术说明的建议:

static NSDateFormatter* dateFormatter = nil;
if (!dateFormatter) 
{
   dateFormatter = [NSDateFormatter new];

   NSLocale *enUSPOSIXLocale = [[NSLocale alloc]  
                                 initWithLocaleIdentifier:@"en_US_POSIX"];

   [dateFormatter setLocale:enUSPOSIXLocale];
   [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
   dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss +0000";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM