【问题标题】:issue with date formatting using NSDateFormatter使用 NSDateFormatter 格式化日期的问题
【发布时间】:2023-03-05 09:29:01
【问题描述】:

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

原始日期字符串示例是: “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,与原始字符串中的月份值无关。

我哪里错了?

【问题讨论】:

  • 在我编辑“2013-06-04 02:19:21 +0000”之前更改日期字符串“2013-06-04 02:19:21 +0000”

标签: ios datetime nsdateformatter date-format


【解决方案1】:

朋友来了

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
【解决方案2】:

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

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]);

【讨论】:

    【解决方案3】:

    首先,+0000 后面有两个引号。我不确定这是否是这篇文章中的错字,但它可能会产生一些影响。

    这条线:

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

    应该是这样的:

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

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

    【讨论】:

    • 日期必须是dd,而不是DD
    • @rmaddy 我刚刚添加了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多