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