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作为时区。