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