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的主要内容,如果未能解决你的问题,请参考以下文章