需要将日期字符串转换为其他格式
原文: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];
答案 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
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);
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];