将 NSString 覆盖到 NSDate 的错误输出



我尝试将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);

这里有很多东西要清理。

  1. week变量重命名为 month
  2. 您的日期格式错误。应该是@"MM/dd/yyyy.
  3. 不要使用八进制数字。

这应该修复您的代码。

但是,根本没有理由让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);

最新更新