Iphone iOS:日期转换导致错误的日期
我以前用几种格式做过几次。无法理解我在这里忽略了什么!日期转换不能那么难!:)但似乎太麻烦了。 我得到的字符串如下: 2013年8月9日06:44:01:950AM 我正在尝试使用以下代码将其转换为日期:Iphone iOS:日期转换导致错误的日期,iphone,ios,objective-c,nsdate,nsdateformatter,Iphone,Ios,Objective C,Nsdate,Nsdateformatter,我以前用几种格式做过几次。无法理解我在这里忽略了什么!日期转换不能那么难!:)但似乎太麻烦了。 我得到的字符串如下: 2013年8月9日06:44:01:950AM 我正在尝试使用以下代码将其转换为日期: [Date_Converter getDateFromString:date withFormat:@"MMM dd YYYY HH:mm:ss:SSSa"] 在DateConverter.m中 +(NSDate *) getDateFromString:(NSString *) strDa
[Date_Converter getDateFromString:date withFormat:@"MMM dd YYYY HH:mm:ss:SSSa"]
在DateConverter.m中
+(NSDate *) getDateFromString:(NSString *) strDate
withFormat:(NSString *) format {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:format];
//[formatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *dateFromStr = [formatter dateFromString:strDate];
return dateFromStr;
}
从上述方法得到的NSDate
返回值如下!
2013-01-04 19:14:01+0000
输入日期
2013年8月9日06:44:01:950AM
这怎么可能?我已经多次使用相同的方法处理各种其他格式的日期。请帮忙。我在这里俯瞰什么
更新
将格式更改为
[Date_Converter getDateFromString : date
withFormat : @"MMM dd yyyy hh:mm:ss:SSSa"];
但它仍然返回null。请帮忙
什么最终起到了作用
添加
[格式化程序设置语言环境:[[NSLocale alloc]initWithLocaleIdentifier:@“en_US_POSIX”];
以下@MartinR建议的迄今为止的转换 检查这个
NSString *date = @"Aug 9 2013 06:44:01:950AM";
[Date_Converter getDateFromString:date withFormat:@"MMM dd yyyy HH:mm:ss:SSSa"];//only you need to lower the char(yyyy) and it will be fine .
这是输出
date = 2013-08-09 00:44:01 +0000
谢谢:)您的日期格式有两个错误:
- 年份的正确格式是
,而不是yyyy
yyy
- 12小时上午/下午时间的格式是
,而不是hh
hh
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
如果您有一个使用英文月名/缩写的固定输入格式。在目标c中,对于
NSDate
,如果您没有设置setTimeZone
,NSDate
将默认时区设为localTimeZone。因此,如果您需要获得作为NSString
string格式给出的确切日期,则需要将时区设置为UTC。按照示例代码进行操作,我想它会对您有所帮助
NSDateFormatter *loacalformatter=[[NSDateFormatter alloc]init];
[loacalformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *localDate =[loacalformatter dateFromString:@"2013-01-04 19:14:01"];
NSLog(@"localDate :%@",localDate);
NSDateFormatter *UTCformatter=[[NSDateFormatter alloc]init];
[UTCformatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[UTCformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *UTCDate =[UTCformatter dateFromString:@"2013-01-04 19:14:01"];
NSLog(@"UTCDate :%@",UTCDate);
UTCDate:2013-01-04 19:14:01+0000(GMT+00:00)是否使用NSLog打印日期?使用
yyyy
,而不是yyyy
。并使用hh
,而不是hh
。顺便问一下,你是坚持使用那个日期格式,还是可以改成更标准的格式?它来自另一个我无法控制的系统。所以,我被卡住了。让我试试那个@Rob。谢谢谢谢你,罗伯!你的回答帮助了我!你能把它贴出来作为答案吗?这样我就可以把它标对了?你是第一个答对的人@简,谢谢。Martin R发帖了,所以你可以随意接受他的。无意冒犯。虽然这是一个有趣的观察结果,但OP的问题是输入日期是“2013年8月9日”,结果是“2013-01-04”!这不是时区问题。他的日期格式字符串中有一个更基本的问题。是的,使用YYYY似乎会严重破坏日期。我尝试了格式@“MMM dd YYYY hh:mm:ss:SSSa”->它仍然返回空值。有什么指导吗?@Jean:可能是区域设置的问题。尝试添加[formatter setLocale:[[NSLocale alloc]initWithLocaleIdentifier:@“en_US_POSIX]”代码>如中所示,并查看是否有帮助。是的,看起来就是这样!一旦我添加了initwithlocaleidentifier,现在就可以工作了!非常感谢。