使用NSDateFormatter的日期格式问题

时间:2013-06-04 02:24:42

标签: ios datetime nsdateformatter date-format

我有一个日期字符串,我想将其转换为另一种格式。

原始日期字符串示例为: “2013-06-04 02:19:21 +0000”

我想将此转换为 “星期三,6月4日”

NSString * date_string = @"2013-06-04 02:19:21 +0000";

NSDateFormatter *complexdateFormater = [[NSDateFormatter alloc] init];
[complexdateFormater setDateFormat:@"yyyy-M-DD HH:mm:ss Z"];
 NSDate* complexdate = [complexdateFormater dateFromString:date_string];
NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"EE, MMM d" options:0
                                                          locale:[NSLocale    currentLocale]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatString];
NSString *todayString = [dateFormatter stringFromDate:complexdate];

但是上面案例的今天字符串打印出来: 无论原始字符串中的月份值如何,月份为Jan。

我哪里错了?

3 个答案:

答案 0 :(得分:13)

在这里,你去找我的朋友

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EEE, MMM dd"];
    NSString *theDate = [dateFormat stringFromDate:date1];

可能访问此帖子的其他所有人的日期格式化程序参考。如果有帮助的话,请加以评估!

/*
     x           number
     xx          two digit number
     xxx         abbreviated name
     xxxx        full name

     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]
     */

答案 1 :(得分:1)

用这个代替你的代码......

NSString * date_string = @"2013-06-04 02:19:21 +0000";
NSDateFormatter *complexdateFormater = [[NSDateFormatter alloc] init];
[complexdateFormater setDateFormat:@"EEE, MMM dd"];
NSDate* complexdate = [complexdateFormater dateFromString:date_string];

如果你想检查日期而不是NSLog,因为NSLog只返回GMT格式的日期......

NSLog(@"Converted date: %@", [complexdateFormater stringFromDate:complexDate]);

答案 2 :(得分:0)

首先,你在+0000之后有两个引号。我不确定这篇文章中是否有拼写错误,但它可能会产生影响。

这一行:

[complexdateFormater setDateFormat:@"yyyy-M-DD HH:mm:ss Z"];

应该是这样的:

[complexdateFormater setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];

在您的日期字符串中,月份为06而不仅仅是6,因此您需要两个月的数字:)此外,您需要DD为dd,正如rmaddy在下面指出的那样。