将字符串转换为 Objective-C 中的日期

Convert String to Date in Objective-C

如何将 Objective C 中的字符串转换为日期。

我已经尝试了以下但没有弄明白。

NSString *str = @"3/2/2018 11:44:32 AM";

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

[df setDateFormat:@"MM/d/yyyy h:mm:ss a"];

NSDate *resultDate = [[NSDate alloc] init];

resultDate = [df dateFromString:str];

NSLog(@"result date: %@", resultDate);

result date: 2018-03-02 06:14:32 +0000 ,but i need to get it as 
result date: 3/2/2018 11:44:32 AM

您正确地将字符串解析为 Date 对象。它由 print 表示的方式是因为默认情况下如果打印一个对象,它的 description 被打印。在 Date 的情况下,它将始终是您获得的格式。但是日期是正确的。

如果你想让它以以前的方式呈现,再次使用相同的 dateFormatter 并将日期格式化为字符串:

NSLog(@"result date: %@", [df stringFromDate:resultDate]);

更新

如果问题出在时差,那是因为使用 DateFormatter 进行解析时将使用您当前的时区。要克服这个问题,请明确设置日期格式化程序的时区和区域设置,请参阅此示例(swift 版本,但您只需要在 dateFormatter 上设置 timeZonelocale 的这两行):

let dateString = "3/2/2018 11:44:32 AM"

let df = DateFormatter()
df.dateFormat = "MM/d/yyyy h:mm:ss a"

// set the timezone and locale of the dateformatter:
df.timeZone = TimeZone(identifier: "GMT")
df.locale = Locale(identifier: "en_US_POSIX")

let date = df.date(from: dateString)

// now it will print as you expect:
print(date)

您的问题与您的应用当前语言环境有关,如果您当前的语言环境是 "en_US" 那么您的 NSLog(@"result date: %@", resultDate); 行将打印

result date: Fri Mar 2 11:44:32 2018

也许,这段代码会对你有所帮助,再次将其转换为 Nsstring 的日期,检查一下这段代码

 -(void)DateChange

 {
   NSString *Input_Date =@"3/22/2018 11:44:32 AM";

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];

  NSDate * Format_date = [dateFormatter dateFromString:Input_Date];
  [dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];

   NSString *Change_date = [dateFormatter stringFromDate:Format_date];
   NSLog(@"Final Change Date :-  %@",Change_date);
}



 My Output is :- 
 Final Change Date :- 3/22/2018 11:44:32 AM