【问题标题】:How to Format Unknown Date Format in Objective-C如何在 Objective-C 中格式化未知日期格式
【发布时间】:2010-10-10 02:21:01
【问题描述】:

我可能忽略了一些简单的事情,但我不知道如何在 Objective-C 中转换特定的日期格式。我收到这种格式的日期:

2010 年 10 月 10 日星期日 01:44:00 +0000

我需要立即将其转换为长格式,如下所示:

2010 年 10 月 10 日

我尝试过使用 NSDateFormatter,但是当我尝试从字符串中获取日期时,它总是返回 nil。我试过这样:

NSString *dateFromData = [articleData objectAtIndex:5];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
NSDate *date = [dateFormatter dateFromString:dateFromData];  

NSString *formattedDateString = [dateFormatter stringFromDate:date];

日期字符串总是返回零。我在这里遗漏了一些简单的东西吗?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    这是我要工作的代码,无法让其他格式字符串起作用

    NSString *dateFromData = @"Sun, 10 Oct 2010 01:44:00 +0000";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss zzzz"];
    
    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:gmt];
    
    NSDate * date = [dateFormatter dateFromString:dateFromData];
    
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    
    NSString *formattedDateString = [dateFormatter stringFromDate:date];
    

    【讨论】:

      【解决方案2】:

      问题是您需要使用两个日期格式化程序。一种用于解析原始格式,一种用于生成所需的输出。您也不能使用 LongStyle 日期格式,因为它与您的输入样式不匹配。

      NSDateFormatter *df = [[NSDateFormatter alloc] initWithDateFormat:@"%a, %d %b %Y %H:%M:%S %z"
                                                   allowNaturalLanguage:false];
      NSDate *d = [df dateFromString:@"Sun, 10 Oct 2010 01:44:00 +0000"];
      NSDateFormatter *df2 = [[NSDateFormatter alloc] initWithDateFormat:@"%B %d, %Y"
                                                    allowNaturalLanguage:false];
      [df2 stringFromDate:d]
      

      (请注意,我在 MacRuby 中编写了这段代码并将其移植回 Objective-C,因此可能存在语法错误。)

      irb(main):001:0> df = NSDateFormatter.alloc.initWithDateFormat("%a, %d %b %Y %H:%M:%S %z", allowNaturalLanguage:false)
      => #<NSDateFormatter:0x20021b960>
      irb(main):002:0> d = df.dateFromString("Sun, 10 Oct 2010 01:44:00 +0000")
      => #<NSCalendarDate:0x2002435e0>
      irb(main):004:0> df2 = NSDateFormatter.alloc.initWithDateFormat("%B %d, %Y", allowNaturalLanguage:false)
      => #<NSDateFormatter:0x20026db60>
      irb(main):005:0> df2.stringFromDate(d)
      => "October 09, 2010"
      

      【讨论】:

      • 格式化程序对我有效。添加了 macirb 会话输出。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多