使用.000Z格式化datestring到NSDate

我想格式化datestring到一个NSDate对象,这听起来不是一件大事。

重点是,datestring在时区值中包含一个点,而不是一个加号或别的东西。 date看起来像这样:

2017-06-04T16:00:00.000Z 

我尝试格式化string

 yyyy-MM-dd'T'HH:mm:ss.ZZZZ yyyy-MM-dd'T'HH:mm:ss.ZZZ yyyy-MM-dd'T'HH:mm:ss.Z 

当然,我也检查了nsdateformatter.com ,这工作,但在xCode的NSDate总是零。

这为我工作

 var str = "2017-06-04T16:00:00.000Z" let formato = DateFormatter() formato.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" formato.timeZone = NSTimeZone(name: "UTC")! as TimeZone formato.formatterBehavior = .default var data = formato.date(from: str) 

在Objective-C中

 NSString *strValue = @"2017-06-04T16:00:00.000Z"; NSString *dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ" // Or this if you like get in local time NSString *dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" NSDateFormatter *dateFmtr = [[NSDateFormatter alloc] init]; [dateFmtr setDateFormat: dateFormat]; // You get a NSDate object NSDate *dateValue = [dateFmtr dateFromString: strValue]; // Or NSString object NSString *dateValue = [dateFmtr stringFromDate: dateValue]; 

我面临同样的问题总是得到nils&作为一个解决scheme,你可以从datestring中消除.ZZZZ部分

 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) let dateString = openningTimeString.components(separatedBy: ".")[0] let myDate = dateFormatter.date(from: dateString)