Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS-将字符串转换为非en GB语言环境NSDate返回nil_Iphone_Ios_Cocoa Touch_Nsdate_Nsdateformatter - Fatal编程技术网

Iphone iOS-将字符串转换为非en GB语言环境NSDate返回nil

Iphone iOS-将字符串转换为非en GB语言环境NSDate返回nil,iphone,ios,cocoa-touch,nsdate,nsdateformatter,Iphone,Ios,Cocoa Touch,Nsdate,Nsdateformatter,可能重复: 我有一个日期,格式为2013年1月14日星期一14:00:00 CET,我尝试将其转换为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

可能重复:

我有一个日期,格式为2013年1月14日星期一14:00:00 CET,我尝试将其转换为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];
但它不起作用,我的
日期
输入数据为en GB语言环境,我的设备的语言环境为nb NO

有什么建议吗?

您可以使用:

[dateFormatter setDateStyle:NSDateFormatterShortStyle];
如果仍要自定义日期格式,请尝试以下方法:

yyyy-MM-dd HH:mm:ss ZZZ
因为你不能发明自己的格式化字符串语法并期望它能工作;您需要实际使用文档中指出的文档格式:OSXV10.8和IOS6.0中的格式化程序使用tr35-25版本

->

如果您好奇:

您可以使用:

[dateFormatter setDateStyle:NSDateFormatterShortStyle];
如果仍要自定义日期格式,请尝试以下方法:

yyyy-MM-dd HH:mm:ss ZZZ
因为你不能发明自己的格式化字符串语法并期望它能工作;您需要实际使用文档中指出的文档格式:OSXV10.8和IOS6.0中的格式化程序使用tr35-25版本

->


如果您好奇:

您错过了您格式中的日期:

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

您缺少格式中的日期:

[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];
NSDateFormatter
无法识别简单的“CET”时区

此外,日期/时间也超出了指定范围,最好不要尝试包括日期或星期(周一)

下面是一个示例,演示如何使用可识别的时区运行代码:

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-1419:00:00+0000

确实显示

CET=“欧洲/巴黎”

所以这看起来像是
NSDateFormatter
中的一个苹果bug

在以下位置报告错误:

简单地说,
NSDateFormatter
无法识别“CET”时区

此外,日期/时间也超出了指定范围,最好不要尝试包括日期或星期(周一)

下面是一个示例,演示如何使用可识别的时区运行代码:

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-1419:00:00+0000

确实显示

CET=“欧洲/巴黎”

所以这看起来像是
NSDateFormatter
中的一个苹果bug


将错误报告到:

我认为您的时区是错误的。只需使用此代码,它就能完美工作:

    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
编辑:

我为你找到了一些东西:


您可以通过使用en_GB语言环境来解决此问题,如中所述:“这些缩写仍然适用于en_GB语言环境”。

我认为您的时区是错误的。只需使用此代码,它就能完美工作:

    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
编辑:

我为你找到了一些东西:

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

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);
希望它能帮助你

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

希望它能帮助您尝试使用此功能

 - (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;
}

我希望这将有助于您。

尝试使用此功能

 - (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;
}

我希望这将对您有所帮助。

看起来dateFromString已被去除润滑脂。请参阅此@NickThorne,它是
NSDate
类方法,而不是
NSDateFormatter
实例方法。看起来dateFromString已被删除。请参阅此@NickThorne,这是
NSDate
类方法,而不是
NSDateFormatter
实例方法。这是一个输入错误:-)不适用于dd以及尝试设置NSTimeZone*cet=[NSTimeZone TimeZoneWibbRevision:@“Europe/Paris”];[日期格式化程序设置时区:cet];仍然返回零。这可能是因为在我当前的语言环境中,Mon是man,Jan是Jan吗?它不区分大小写,您使用了哪个语言环境?无论如何,如果您使用en GB,则CET会被识别,对于en US,它不会被识别,并且会返回零,我不知道你还能用什么,除了en GBit是一个打字错误:-)不能与dd一起使用,请尝试设置NSTimeZone*cet=[NSTimeZone TimeZone WithabRevision:@“欧洲/巴黎”];[日期格式化程序设置时区:cet];仍然返回零。这可能是因为在我当前的语言环境中,Mon是man,Jan是Jan吗?它不区分大小写,您使用了哪个语言环境?无论如何,如果您使用en GB,则CET会被识别,对于en US,它不会被识别,并且会返回零,我不知道你还能用什么,除了OP想要的CET作为时区。除了OP想要的CET作为时区。