IOS NSDate来自字符串,仅限时间

时间:2014-07-31 06:11:16

标签: ios objective-c nsdate nsdateformatter

我的任务是将字符串随时间解析为NSDate。我用以下代码做得非常好:

NSString* timeStr = @"15:00:00"

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];    
[formatter setDateFormat:@"HH:mm:ss"];

NSDate* result = [formatter dateFromString:timeStr];

但结果我得到 2000-01-01 15:00:00 CET ,我不明白为什么日期设置为 2000-01-01 ,而不是 2001-01-01 (参考日期)或 1970-01-01 。并且2000-01-01似乎不是随机值...... :)

2 个答案:

答案 0 :(得分:0)

如果你想要它只是一个带有日期部分的字符串,只需使用dateFormatter,就像你之前所做的那样。

NSString* timeStr = @"15:00:00";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[formatter setDateFormat:@"HH:mm:ss"];

NSDate* result = [formatter dateFromString:timeStr];

[formatter setDateFormat:@"YYYY-MM-DD"];
timeStr = [formatter stringFromDate:result];

或者您需要直接在日期格式化程序中设置日期字符串,这是因为如果您在日期格式化程序中指定时间字符串,您将获得日期与时间字符串的组合

 NSString* dateStr = @"2001-01-01";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[formatter setDateFormat:@"YYYY-MM-DD"];

NSDate* result = [formatter dateFromString:dateStr];

答案 1 :(得分:-1)

你没有传递任何信息。因此,NSDate中的任何其他值都是未定义的。