iOS – 无法parsingdatestring“31-07-2014 00:00 BST”使用NSDateFormatter获取string08-31-14

需要将datestring转换为不同的格式

原文: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设置适当的时区,然后根据它分析date。 看看setDateFormat。 我使用单引号来表示一个静态string是date格式的一部分。

它可以更dynamic地写入来确定正确的时区,但是一些string拆分是必需的。

我希望它有帮助。

格式化时,您正在使用空的NSDate(* dateFormat),这意味着date格式化程序没有格式化。 它是空的,因为你重新分配它并重新初始化它,这意味着你重置variables的所有内容。 给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]); 

你的date格式化程序不能分析你的string,因为它有错误的格式,并返回nil 。 然后你在-stringFromDate:使用nil -stringFromDate:并在NSLog输出nil 。 你可以通过修改你的date格式来解决这个问题:

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

但这是不好的做法,因为你松散的时区信息。 z (或V ,不知道为什么)作为时区格式将无法正常工作,因为BST是一个元时区。 作为解决方法,您可以设置date格式化程序的时区并执行转换。

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

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

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