iOS 中的 NSDateFormatter

Posted

技术标签:

【中文标题】iOS 中的 NSDateFormatter【英文标题】:NSDateFormatter in iOS 【发布时间】:2012-10-30 19:14:25 【问题描述】:

我正在使用 Twitter API 下载推文数量,因为我需要在我的 ios 应用程序中使用它们。我正在使用this function 来执行此操作。问题是我需要知道写推文的日期、月份和年份。

回来的日期是这样的:

Thu Oct 25 10:34:58 +0000 2012

但我需要这样格式的日期:

25/10/2012 10:34

所以,我想将第一种格式转换为第二种格式。我试过用 NSDate 和 NSDateFormatter 来做,用第一个 NSString 获得一个 NSDate,然后在第二个 NSString 中转换这个 NSDate,但我没有得到它。

    NSArray *dateArray = [tweets valueForKey:@"created_at"];
    NSString *dateString = [dateArray objectAtIndex:0];   // Thu Oct 25 10:34:58 +0000 2012

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];

    NSDate *date = [dateFormatter dateFromString:dateString];
    NSLog(@"%@", date);

    [dateFormatter setDateFormat:@"dd/MM/yyyy"];

    NSString *realDateStr = [dateFormatter stringFromDate:date];
    NSLog(@"%@", realDateStr);

两个 NSLog 各自返回 null。

有人可以帮我吗?谢谢。

【问题讨论】:

嗯,我认为这里的想法是正确的。我不确定 NSDateFormatter 是否喜欢这样来回改变它的格式,我可能会尝试使用 2 个单独的 NSDateFormatter 来执行此操作:一个来自 twitter 日期字符串 - > NSDate 对象,然后第二个来自该 NSDate 对象 - > NSString 像“dd/MM/yyyy”。另外,也可以在NSString *dateString = [dateArray objectAtIndex:0]; 之后添加NSLog(@"%@",dateString);,以确保您以您认为的方式从 twitter 获取字符串。 dateString 是 Thu Oct 25 10:34:58 +0000 2012,因此具有预期的格式。问题是 NSDate *date = [dateFormatter dateFromString:dateString] 行返回空值。我认为日期样式 NSDateFormatterMediumStyle 不适合格式化此 NSString,但我不知道如何使用 setDateFormat:. 格式化它 我也不是 100% 确定副手,我必须玩一点。 Abellina 的帖子看起来不错,试试吧。 记住 Xcode 调试器显示日期/时间 UTC+0 【参考方案1】:

尝试设置最初的日期格式来解析出你得到的日期字符串,像这样:

NSString *dateString = @"Thu Oct 25 10:34:58 +0000 2012";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd hh:mm:ss Z yyyy"];

NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"%@", date);

[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm"];

NSString *realDateStr = [dateFormatter stringFromDate:date];
NSLog(@"%@", realDateStr);

【讨论】:

结果是一样的,date和realDateStr都为null:\ 我测试了这段代码,我没有得到空值。在这种情况下,您的阵列中可能有问题。完全按照我上面分享的代码尝试一下。我得到:2012-10-25 10:34:58 +0000 用于第一个,25/10/2012 05:34 用于第二个 NSLog。 我已经用你的代码试过了,我在两个输出中都得到了 null :\【参考方案2】:

试试这个简单的方法:

NSString* string=@"26-01-2014";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-mm-yyyy"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];

NSDate *date = [dateFormatter dateFromString:string];
NSLog(@"Date = %@",date);

【讨论】:

以上是关于iOS 中的 NSDateFormatter的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发:iOS中的多控制器管理

IOS5中的Safari不兼容Javascript中的Date问题

Java中的IO流

iOS6中的iOS行车路线

java中的IO 的示例

iOS中的NSLineSeparatorCharacter?