Objective c 在某些情况下,将NSString转换为NSDate会增加一年
自年底以来,我在将NSString转换为NSDate时遇到了一些问题。这段代码以前一直工作得很好,但它突然开始表现得异常出色 例如,当转换为NSDate时,2013-01-05变为2014-01-05 因为这是一整年,所以感觉不像是时区的惊吓 它不是在2012年开始做这件事的 有人知道什么地方出了问题吗 代码: NSString*dateString=postInfo.noteDate; NSString*newDateString=[dateString substringToIndex:10]Objective c 在某些情况下,将NSString转换为NSDate会增加一年,objective-c,ios,cocoa-touch,nsdate,Objective C,Ios,Cocoa Touch,Nsdate,自年底以来,我在将NSString转换为NSDate时遇到了一些问题。这段代码以前一直工作得很好,但它突然开始表现得异常出色 例如,当转换为NSDate时,2013-01-05变为2014-01-05 因为这是一整年,所以感觉不像是时区的惊吓 它不是在2012年开始做这件事的 有人知道什么地方出了问题吗 代码: NSString*dateString=postInfo.noteDate; NSString*newDateString=[dateString substringToIndex:10
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd"];
NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:newDateString];
newDateString返回2013-01-05
日期返回2014-01-05对年份使用yyyy,而不是yyyy,这将给出周年。参见ISO标准 使用小写字母yyyy,yyyy是另一回事: 年份(以“一年中的一周”为基础的日历)。该年名称用于ISO 8601定义的ISO年-周日历,但可用于需要周日期处理的非公历日历系统。可能并不总是与日历年的值相同 请参见以下内容中的: Y 1..n 1997年(基于“一年中的一周”日历)。通常,长度指定填充,但对于两个字母,它还指定最大长度。该年名称用于ISO 8601定义的ISO年-周日历,但可用于需要周日期处理的非公历日历系统。可能并不总是与日历年的值相同 y 1..n 1996年。通常,长度指定填充,但对于两个字母,它还指定最大长度 所以你想要“yyyy” 这个“bug”也在《梦幻》中讨论过,这是任何iOS/Cocoa开发人员都必须看到的 维基百科关于
创建一个NSDate,然后创建另一个NSDate并覆盖第一个NSDate。照办
NSDate *date = [dateFormat dateFromString:newDateString];
我希望这能帮助你。试试这个
- (NSDate*) dateFromString:(NSString*)aStr
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[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;
}
谢谢大家的努力回答,不幸的是我不能检查你们所有人…:/谢谢大家的努力回答,不幸的是我不能检查你们所有人…:/不客气。vikingosegundo的答案很好地涵盖了细节,并提供了很好的参考资料。干杯。请确保观看链接视频。他们正在解释你可能遇到的更多陷阱。(也就是说,你正在删除时间部分。这可能——但不是必须——导致麻烦)是的,我也这么想,当我听说这个错误应该在7号消失时
- (NSDate*) dateFromString:(NSString*)aStr
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[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;
}