【问题标题】:NSDateFormatter and NSString to NSDate conversionNSDateFormatter 和 NSString 到 NSDate 的转换
【发布时间】:2012-09-10 09:19:38
【问题描述】:

美好的一天,我正在尝试将从服务器获取的 NSString 转换为 NSDate 对象。 那是代码:

NSString *date = @"Sep 12 at 12:03 am";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM d 'at' H:m a"];
self.messageDateAndTime = [dateFormatter dateFromString:date];
NSLog(@"NSDate: %@", self.messageDateAndTime);

我以 date 字符串所具有的格式获取日期。在我尝试为此日期格式创建自己的格式化程序之后。但无论如何,我得到了 null

我做错了什么?

【问题讨论】:

  • 请记住,[[NSDateFormatter alloc] init] 是一项昂贵的操作。最好缓存结果。
  • 谢谢,但在这种情况下我不太关心这个,因为它不起作用(((

标签: objective-c ios5 nsstring nsdate nsdateformatter


【解决方案1】:

我在上面的代码中调试你运行良好并给NSDate: 1970-09-11 18:33:00 +0000这个日志。首先检查你的字符串。有关更多信息,您可以使用以下类别。

// NSString+Date.h
@interface NSString (Date)
+ (NSDate*)stringDateFromString:(NSString*)string;
+ (NSString*)stringDateFromDate:(NSDate*)date;
@end


// NSString+Date.m
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];

NSDate *date = [dateFormatter dateFromString:stringDate ];
[dateFormatter release];
+ (NSDateFormatter*)stringDateFormatter
{
    static NSDateFormatter* formatter = nil;
    if (formatter == nil)
    {
        formatter = [NSDateFormatter alloc] init];
        [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
    }   
    return formatter;
}

+ (NSDate*)stringDateFromString:(NSString*)string
{
    return [[NSString stringDateFormatter] dateFromString:string];
}

+ (NSString*)stringDateFromDate:(NSDate*)date
{
    return [[NSString stringDateFormatter] stringFromDate:date];
}


// Usage (#import "NSString+Date.h")
NSString* string = [NSString stringDateFromDate:[NSDate date]];
NSDate* date = [NSString stringDateFromString:string];

【讨论】:

  • 我不知道你是怎么运行这段代码的,但是无论如何,日志是不正确的。我的格式化程序必须以 NSString *date 的格式显示日期
【解决方案2】:

请找到正确的NSDateFormatterformatting string here

【讨论】:

    【解决方案3】:

    我自己找到了解决方案,它会返回 null,直到您自己设置语言环境。这是代码:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    [dateFormatter setLocale:usLocale];
    [dateFormatter setDateFormat:@"MMM d 'at' H:m a"];
    self.messageDateAndTime =[dateFormatter dateFromString:messageDate];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多