从字符串创建NSDate

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从字符串创建NSDate相关的知识,希望对你有一定的参考价值。

我有这样的NSString@"3/15/2012 9:15 PM",我想将它转换为NSDate,我这样做了:

NSString *str =@"3/15/2012 9:15 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"mm/dd/yyyy HH:mm"];
NSDate *date = [formatter dateFromString:];

NSLog(@"%@", date);  // date = null

谢谢你能帮我吗

答案

使用以下解决方案

NSString *str = @"3/15/2012 9:15 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"MM/dd/yyyy HH:mm a";

NSDate *date = [formatter dateFromString:str];

NSLog(@"%@", date);

编辑:对不起,格式应如下:

formatter.dateFormat = @"MM/dd/yyyy hh:mm a";

显示的时间将是GMT时间。因此,如果您添加/减去时区,它将是晚上9:15。

编辑:#2

使用方法如下。你也会得到准确的时间。

NSString *str = @"3/15/2012 9:15 PM";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"MM/dd/yyyy hh:mm a";

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];

formatter.timeZone = gmt;

NSDate *date = [formatter dateFromString:str];

NSLog(@"%@",date);
另一答案

你的格式化程序错了。根据NSDateFormatter文档,它应该是“MM / dd / yyyy h:mm a”。您还可能希望按照日期格式设置指南中的说明设置区域设置:

如果您正在使用固定格式的日期,则应首先将日期格式化程序的区域设置设置为适合您的固定格式的区域设置。在大多数情况下,最佳选择的语言环境是en_US_POSIX,这是一种专门设计用于产生美国英语结果的语言环境,无论用户和系统偏好如何。

试试这个:

NSString *str = @"3/15/2012 9:15 AM";
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setLocale:enUSPOSIXLocale];
[formatter setDateFormat:@"MM/dd/yyyy h:mm a"];
NSDate *date = [formatter dateFromString:str];

NSLog(@"%@",date);

输出:

2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000
另一答案

嗯 - 你出错了几个原因

  1. NSDateFormatter是严格的,你没有。
  2. 你没有提供str到dateFromString:
NSString* str = @"3/15/2012 9:15 PM";
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"];
NSDate* date = [formatter dateFromString:str];


NSLog(@"%@",date);
另一答案
  NSString *str =@"3/15/2012 9:15 PM";
NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
   [dateformatter setDateFormat:@"MM/dd/yyyy"];
NSArray *firstSplit = [str componentsSeparatedByString:@" "];
NSDate *dateSelected = [dateformatter dateFromString:[firstSplit objectAtIndex:0]];

    [dateformatter setDateFormat:@"mm:ss"];
NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]];
NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]);

NSLog(@"%@",[dateformatter stringFromDate:dateSelected]);

以上是关于从字符串创建NSDate的主要内容,如果未能解决你的问题,请参考以下文章

从 NSDate 到 NSString 的转换,属性上的核心数据迁移未正确显示字符串

创建具有特定时区的 NSDate 对象

从 NSDateComponents 创建的 NSDate 不正确?

ios中从字符串到NSDate的日期转换

字符串和时间(NSDate)的常用方法

创建 NSDate 时区问题