我尝试将NSString
转换为NSDate
对象,但NSDateFormatter
返回了一个奇怪的值。我想要01/07/2016
但它会返回错误的输出。输出为:
今天: 2015-12-20 00:00:00 +0000
这是代码:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger day = 01;
NSInteger week = 07;
NSInteger year = [components year];
NSString *string = [NSString stringWithFormat:@"%ld/%ld/%ld", (long)week,(long)day, (long)year];
NSLog(@"Min Date: %@",string);
NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateformate setDateFormat:@"MM/dd/YY"];
strMinDate = [dateformate dateFromString:string];
NSLog(@"Today: %@", strMinDate);
这里有很多东西要清理。
- 将
week
变量重命名为month
。 - 您的日期格式错误。应该是
@"MM/dd/yyyy
. - 不要使用八进制数字。
这应该修复您的代码。
但是,根本没有理由让NSDateFormatter
参与其中。只需直接从更新的NSDateComponents
创建一个新日期即可。
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
components.day = 1;
components.month = 7; // July
NSDate *minDate = [NSCalendar dateFromComponents:components];
这将为您提供本地时间的新日期。
一旦你有了正确的NSDate
,你现在可以使用NSDateFormatter
将其格式化为你选择的字符串。
NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
[dateformat setDateFormat:@"dd/MM/yy"];
NSString *dayMonthYearStr = [dateFormat stringFromDate:minDate];
您可以尝试以下代码:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger day = 01;
NSInteger month = 07;
NSInteger year = [components year];
NSString *string = [NSString stringWithFormat:@"%ld/%ld/%ld", (long)year,(long)month, (long)day];
NSLog(@"Min Date: %@",string);
NSString *date_str = string;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy/MM/dd"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithName:@"GMT"];
[dateFormat setTimeZone:gmt];
NSDate *date = [dateFormat dateFromString:date_str];
NSLog(@"%@",date);