0

可能重复:
NSString 到 NSDate

我有一个日期格式,Mon Jan 14 14:00:00 CET 2013我尝试将其转换为 NSDate:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];
NSString *dateString = @"Mon Jan 14 14:00:00 CET 2013"
NSDate *date = [df dateFromString:dateString];

但它不起作用,我datenil 输入数据是 en-GB 语言环境,我设备的语言环境是 nb-NO

有什么建议么?

4

6 回答 6

2

您的格式缺少一天:

[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];

如果不是拼写错误,那么下一步就是设置正确的语言环境,以便格式化程序能够识别 CET 时区,例如 en-GB 将修复该问题:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
// that will fix the problem with not recognized CET timezone
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-GB"]];
[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];
NSString *dateString = @"Mon Jan 14 14:00:00 CET 2013"
NSDate *date = [df dateFromString:dateString];
于 2013-01-15T11:04:34.157 回答
1

我认为你的时区是错误的。只需使用此代码,它将完美运行:

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"EEE MMM dd HH:mm:ss zzz y"];
    NSString *dateString = @"Mon Jan 14 14:00:00 EDT 2013";
    NSDate *date = [df dateFromString:dateString];
    NSLog(@"date :: %@",date);

它将输出记录为:

date :: 2013-01-14 18:00:00 +0000

编辑 :

我为你找到了一些东西:NSDateFormatter 不解析某些时区

您可以通过使用en_GB Locale来解决这个问题,如Working with Date and Time in Cocoa中所述:“这些缩写仍然适用于 en_GB 语言环境” 。

于 2013-01-15T11:12:08.057 回答
1

尝试使用此功能

 - (NSDate*) dateFromString:(NSString*)aStr
{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
    //[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss a"];
    [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSLog(@"%@", aStr);
    NSDate   *aDate = [dateFormatter dateFromString:aStr];
    [dateFormatter release];
    return aDate;
}

我希望这会帮助你。

于 2013-01-15T11:14:26.617 回答
0

简单地说,“CET”不是一个公认的时区NSDateFormatter

此外,日期/时间已过指定,最好不要尝试包括日期或星期(星期一)。

这是一个示例,它演示了具有可识别时区的工作代码:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"EEE MMM dd HH:mm:ss zzz yyyy"];
NSString *dateString = @"Mon Jan 14 14:00:00 EST 2013";
NSDate *date = [df dateFromString:dateString];
NSLog(@"date: %@", date);

NSLog 输出

日期:2013-01-14 19:00:00 +0000

NSLog(@"abbreviationDictionary: %@", [NSTimeZone abbreviationDictionary]);

确实显示

CET = "欧洲/巴黎";

所以这看起来像是NSDateFormatter.

报告错误:Apple Bug Reporter

于 2013-01-15T11:09:37.780 回答
0

CET 不被认可

试试这个 :-

NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"EEE MMM dd HH:mm:ss yyyy"];
    NSString *dateString = @"Mon Jan 14 14:00:00 2013";
    NSDate *date = [df dateFromString:dateString];
    NSLog(@"%@",date);

希望对你有帮助

于 2013-01-15T11:12:54.577 回答
-1

您可以使用:

[dateFormatter setDateStyle:NSDateFormatterShortStyle];

如果您仍想自定义日期格式,请尝试以下方法:

yyyy-MM-dd HH:mm:ss ZZZ

因为不能发明自己的格式化字符串语法并期望它起作用;您需要实际使用文档中指出的格式:OS X v10.8 和 iOS 6.0 中的格式化程序使用版本 tr35-25。

-> https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

如果您好奇:http ://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

于 2013-01-15T11:04:20.457 回答