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

时间:2014-08-18 11:33:23

标签: ios

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

原文: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];

4 个答案:

答案 0 :(得分:2)

这应该有效:

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。我使用单引号来表示静态字符串是日期格式的一部分。

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

我希望它有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

@ 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);

答案 3 :(得分:0)

问题在于您的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。然后,您使用nil中的-stringFromDate:并在nil中打印NSLog。您可以通过修改日期格式来解决这个问题:

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

但这是不好的做法,因为你松开了时区信息。 z(或V,不确定原因)因为timeZone格式无法正常工作,因为BST是元时区。作为解决方法,您可以设置日期格式化程序的时区并执行转换。

您可以阅读有关格式模式here的信息,如果您没有这样做,请将此页面添加到书签中。

此外,您不需要分配不必要的对象来使用指针:

// 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];