之前我曾多次使用多种格式。无法理解这里有什么可以忽略的!日期转换不能那么难! :)但似乎太烦人了。 得到这样的字符串: 2013年8月9日06:44:01:950 AM
我尝试使用此代码将其转换为日期:
[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:950 AM
这怎么可能?对于各种其他日期格式,我已经多次使用相同的方法。请帮忙。我在这里俯瞰什么?
更新 将格式更改为
[Date_Converter getDateFromString : date
withFormat : @"MMM dd yyyy hh:mm:ss:SSSa"];
但它仍然返回null。请帮助。
最终得到什么 添加 [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@“en_US_POSIX”]]; 到目前为止转换为@MartinR建议如下!
答案 0 :(得分:7)
您的日期格式有两个错误:
yyyy
,而不是YYYY
。hh
,而不是HH
。更新:此外,为避免依赖当前区域设置,请添加
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
如果您有使用英文月份名称/缩写的固定输入格式。
答案 1 :(得分:0)
检查一下..
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
谢谢:)
答案 2 :(得分:0)
如果您未设置NSDate
,则setTimeZone
的目标c中,NSDate
会将默认时区设为localTimeZone。因此,如果您需要获得以NSString
字符串格式提供的确切日期,则需要将TimeZone设置为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)