【问题标题】:create a NSDate from a string从字符串创建 NSDate
【发布时间】:2012-04-03 21:07:57
【问题描述】:

我有一个像这样的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

你能帮帮我吗,谢谢。

【问题讨论】:

标签: objective-c ios format nsdate


【解决方案1】:

嗯——你错了有几个原因

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

【讨论】:

  • 谢谢,但是我所有的字符串都是这样的@"mm/dd/yyyy HH:mm PM/AM",这是一个网络服务返回给我这个
  • 3 为真,除非他使用 ARC。
【解决方案2】:

使用以下解决方案

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

显示的时间将是格林威治标准时间。因此,如果您添加/减去时区,将是晚上 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);

【讨论】:

  • 结果不一样:NSLog(@"str") =3/13/2012 2:00 PM NSLog(@"date") = 2012-01-13 11:00:00 + 0000
  • 谢谢,日期相同但时间不一样,对不起
【解决方案3】:
  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]);

【讨论】:

  • 你想要什么问题的时间
  • [dateformatter setDateFormat:@"mm:ss"]; NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]]; NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]);
【解决方案4】:

您的格式化程序错误。根据 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多