2

我需要将 NSString 转换为 NSDate,但以下代码仅在用户设备未设置为 24 小时制时才有效。

NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];

NSString *aTime = @"2/11/2013 12:00:00 AM";
NSDate *aDate = [formatter dateFromString:aTime];

但是,当设备处于 24 小时制时,aDate 返回 null。有什么帮助吗?

4

3 回答 3

8

我认为您可能会看到QA1480描述的行为的副作用。Apple 已经解决了它可能认为开发人员没有正确遵守语言环境的问题,方法是修改您规定的日期格式,除非您明确表示不这样做。

您可以通过添加:

formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
      /* and autorelease if not using ARC */

这基本上是说“我刚刚设置的日期格式是我想要的,请不要以任何方式修改它”。

于 2013-02-16T00:45:24.513 回答
1
    I think the following snippet might helps you out.

    NSString *dateString = @"09:34 AM";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"dd-MM-yyyy";
    NSString *stringFromDate = [dateFormatter stringFromDate:[NSDate date]];

    dateFormatter.dateFormat = @"dd-MM-yyyy hh:mm a";
    dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

    NSDate *returnDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", stringFromDate, dateString]];
于 2014-09-16T16:57:09.153 回答
0

试试这个代码

NSString *string = @"2015-11-30 15:00:00";
NSDateFormatter* formatter =  [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
[formatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [formatter dateFromString:string];

日期:2015-11-29 21:30:00 +0000

它采用 UTC 格式,您可以根据需要进行修改!

于 2015-11-30T07:27:31.193 回答