【问题标题】:Unable to parse date from string using NSDateFormatter [closed]无法使用 NSDateFormatter 从字符串中解析日期 [关闭]
【发布时间】:2013-04-23 06:33:00
【问题描述】:

我在使用 NSDateFormatter 解析字符串中的日期时卡住了一段时间

字符串中的日期格式如下

2011 年 1 月 1 日上午 12:00:00

下面是我用来解析的代码

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss"];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSDate *date = [[NSDate alloc]init];
date = [dateFormatter dateFromString:@"1/1/2011 12:00:00 AM"];

此代码适用于日期 @"12/31/2011" 和格式 @"MM/dd/yyyy"

请帮忙

【问题讨论】:

  • 你只需要这个:[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
  • 已经有很多类似的问题和答案了。如果您的时间是 24 小时格式,您只需将 dateFormat 指定为 @"MM/dd/yyyy hh:mm:ss a" 或 HH。无需设置样式。如果要将日期转换为其他格式,请解析日期然后设置格式。
  • 每隔几个小时,我就会阅读一个关于日期格式的问题。他们为什么不直接进行搜索?

标签: iphone ios objective-c nsdate nsdateformatter


【解决方案1】:

使用我的自定义方法并将该日期解析为另一种格式...

-(NSString *)changeDateFormat:(NSString*)stringDate dateFormat:(NSString*)dateFormat getwithFormat:(NSString *)getwithFormat{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:dateFormat];

    NSDate *date = [dateFormatter dateFromString:stringDate];

    [dateFormatter setDateFormat:getwithFormat];

    NSString *convertedString = [dateFormatter stringFromDate:date];
    //NSLog(@"Converted String : %@",convertedString);
    return convertedString;
}

像下面这样使用这个方法..

 NSString *strSDate = [self changeDateFormat:@"1/1/2011 12:00:00 AM" dateFormat:@"dd/MM/yyyy hh:mm:ss a" getwithFormat:@"dd/MM/yyyy"];
 NSLog(@"Converted String : %@",strSDate);

getwithFormat 参数中设置您想要的任何格式,并在您的日期字符串中的dateFormat 参数中设置格式...

OUTPUT IS => 转换后的字符串:01/01/2011

【讨论】:

  • @ParasJoshi 在获取日期后无需实例化新的 dateFormatter,您只需更改格式即可:)。已编辑
  • 是的,我知道如果他只是在该格式化程序中添加一个,那么它将起作用,但我只是给出这种方法,它可以在任何时候使用任何格式.. 你说的方法非常简单?? :)
  • 是的,只要时区没有问题,它就可以工作,如果输入日期字符串有 timeZone 它可以完美地工作。但如果没有,那么可能会有问题。像服务器发送 UTC 和当前设置 dateFormatter 将假定 dateString 在 localTimeZone。
  • 是的,但大多数情况下它在这里运行良好,我也创建了这种类型的方法,但在我认为这更适合使用之后.. :) thanx..
  • 我只是指出创建 NSDateFormatter 的实例总是很昂贵,如果有很多转换,许多人会建议将其设为静态或将其保留为实例变量。就是这样:)
【解决方案2】:

试试这个

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
//First format date from string
NSDate *date = [dateFormatter dateFromString:@"01/01/2011 12:00:00 AM"];

//Set date formatter to specific format
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];

//Log the value
NSLog(@"%@",[dateFormatter stringFromDate:date]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2010-12-07
    相关资源
    最近更新 更多