【问题标题】:Convert NSString in MM-dd-yy format to NSDate将 MM-dd-yy 格式的 NSString 转换为 NSDate
【发布时间】:2013-02-24 06:19:11
【问题描述】:

在我的应用程序中,我得到一个日期为 01-22-12(MM-dd-yy) 的 NSString。现在我想将该字符串转换为 NSDate。我使用了下面的代码。但它给出的日期为 2012-01-04 05:00:00 +0000

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM-dd-yy"];
NSDate *dateFromString = [dateFormatter dateFromString:self.selectedWeek];

将我的字符串转换为 NSDate 的正确方法是什么?

【问题讨论】:

  • 你的问题不清楚。你到底想要什么?
  • 需要具有相同格式的 nsdate 值。

标签: objective-c nsdate nsdateformatter


【解决方案1】:

从您最初的问题来看,我不完全清楚您是否想要:

1 字符串为NSDate

2 能够从 NSDate 实例中取回原始日期 NSString

您的代码基本上是正确的。我只是运行了一个稍微改编的版本,它似乎工作正常:

NSString *dateString = @"01-22-12";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MM-dd-yy"];
NSDate *date = [dateFormatter dateFromString:dateString];
NSString *outString = [dateFormatter stringFromDate:date];

NSLog(@"%@",date);
NSLog(@"%@",outString);

这产生了:

2013-02-24 09:57:24.352 datesAgain.m.out[787:707] 2012-01-22 00:00:00 +0000
2013-02-24 09:57:24.352 datesAgain.m.out[787:707] 01-22-12

因此,无论哪种方式,结果似乎都是您想要的。我怀疑您获得错误值的原因是 self.selectedWeek 没有您认为的值。我会在调试器或NSLog 中检查它。如果您使用其他格式字符串在其他地方创建它,请注意它们可能很棘手且有点不直观 - 例如,s 表示秒,但 S 表示秒的几分之一。 可用的文档 here - 最新的 Unicode 格式化标准 here (ios6.0/OSX 10.8) - 也链接到上一个链接,就像所有以前的相关标准一样

【讨论】:

  • 我还需要 outstring 格式的日期值表示 01-22-12。我想将该值作为方法的参数发送。我使用该值编写查询以从数据库中获取值使用该日期。列数据类型之一是日期。我想将此值传递给该字段。
  • 好的。所以答案是 2。您需要确定 db 需要什么格式的日期,生成该格式的字符串并将其插入到查询中。 '01-22-12' 对您的数据库是否正确?如果是这样,上面的代码应该可以工作——你可以插入outString。如果没有,您可以创建第二个NSDateFormatter 并使用上面链接的资源以正确格式生成日期字符串,将其设置为格式字符串,并生成数据库将接受的字符串
  • 是的,我只需要 01-22-12 格式的日期。那么我该如何插入该外字符串。
  • 使用-stringWithFormat:... - 例如[NSString stringWithFormat:@"SELECT COLS FROM TABLE WHERE DATE = %@",dateString];。如果数据库需要 C 字符串,请在此使用 -utf8String。您还可以使用%@ 将列名和表名插入为变量 - 但请注意,这可能会使您面临 SQL 注入攻击,具体取决于您的应用程序中函数的使用方式。如果您使用sqlite C API,则有用于组装 C 字符串查询的特殊功能 - 此处的文档sqlite.org/capi3ref.html
【解决方案2】:

你可以使用descriptionWithCalendarFormat:timeZone:locale:

NSString * mydate =  [dateFromString descriptionWithCalendarFormat:@"%Y-%m-%d"
                                timezone:nil
                                  locale:nil];

【讨论】:

  • 但我需要 NSdate 对象中的那个值。
  • dateFromString 是您转换后的日期,因此这将返回您的 NSDate 对象
  • 但是你分配给了nsstring。
猜你喜欢
  • 2022-10-14
  • 2012-01-27
  • 2022-01-25
  • 1970-01-01
  • 2012-03-05
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多