iOS - 无法使用 NSDateFormatter 解析日期字符串"31-07-2014 00:00 BST"获取字符串 08-31-14



需要将日期字符串转换为其他格式

original: dd-MM-yyyy HH:mm BST预期:MM-dd-yy

尝试下面的代码,但不工作

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat =  @"dd-MM-yyyy HH:mm BST";
NSDate *dateFormat = [[NSDate alloc] init];
dateFormat = [dateFormatter dateFromString:dateString];
[dateFormatter setDateFormat:@"dd-MM-yy"];
NSLog(@"formatted date: %@", [dateFormatter stringFromDate:dateFormat]);
return [dateFormatter stringFromDate:dateFormat];

应该可以:

NSString *dateString = @"31-07-2014 00:00 BST";
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"BST"]];
[dateFormatter setDateFormat:@"dd-MM-yyyyHH:mm 'BST'"];
NSDate *dateFormat = [[NSDate alloc] init];
dateFormat = [dateFormatter dateFromString:dateString];
[dateFormatter setDateFormat:@"dd-MM-yy"];
NSLog(@"formatted date: %@", [dateFormatter stringFromDate:dateFormat]);

我在这里所做的是为源NSDateFormatter设置适当的时区,然后根据它解析日期。看看setDateFormat。我使用单引号表示静态字符串是日期格式的一部分。

可以更动态地编写以确定正确的时区,但需要进行一些字符串分割。

希望有帮助。

在格式化时使用的是空的NSDate (*dateFormat),这意味着日期格式化程序没有什么要格式化的。它是空的,因为您重新分配它并重新初始化它,这意味着您重置了变量的所有内容。给NSDate一个值它就能正常工作了

问题出在你的dateFormat:

dateString = @"31-07-2014 00:00 BST";
...
dateFormatter.dateFormat =  @"dd-MM-yyyy HH:mm BST"; // wrong format
...
// this makes dateFormat to become nil
dateFormat = [dateFormatter dateFromString:dateString];
...
// pass nil here
NSLog(@"formatted date: %@", [dateFormatter stringFromDate:dateFormat]);

你的日期格式化程序不能解析你的字符串,因为它有错误的格式并返回nil。然后在-stringFromDate:中使用nil,在NSLog中打印nil。你可以像这样修改日期格式:

dateFormatter.dateFormat = "dd-MM-yyyy HH:mm 'BST'"; // note 'quotes'

但这是不好的做法,因为您丢失了时区信息。z(或V,不确定为什么)作为时区格式将不起作用,因为BST是元时区。作为一种解决方法,您可以设置日期格式化程序的时区并执行转换。

你可以在这里阅读格式模式,如果你没有,把这个页面添加到你的书签。

你也不需要分配不必要的对象来使用指针:

// this is useless, you create pointer to NSDate, create/init NSDate instance
// and make that pointer to point to created instance
NSDate *dateFormat = [[NSDate alloc] init]; 
// here you make dateFormat to point somewhere else -dateFromString: returns
// causing ARC to delete your NSDate instance created on the previous line
dateFormat = [dateFormatter dateFromString:dateString];
// so, you just want:
NSDate *dateFormat = [dateFormatter dateFromString:dateString];

@user1088267

方法:1

NSDate *currentDate=[[NSDate alloc]init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd.MM.YY HH:mm:ss BST "];
NSString *dateString = [dateFormatter stringFromDate:currentDate;
NSLog(@"%@",dateString);

方法:2

NSDate *currentDate=[[NSDate alloc]init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"MM-dd-yy HH:mm:ss BST "];
NSString *dateString = [dateFormatter stringFromDate:currentDate;
NSLog(@"%@",dateString);

相关内容

最新更新