将.000Z格式的日期字符串格式化为NSDate

时间:2017-05-26 17:37:06

标签: ios objective-c nsdate

我想将日期字符串格式化为NSDate对象,这听起来不是什么大事。

关键是,日期字符串在时区值中包含一个点,而不是加号或其他内容。日期如下:

2017-06-04T16:00:00.000Z

我尝试格式化字符串,如

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总是为零。

3 个答案:

答案 0 :(得分:9)

这项工作对我来说

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)

答案 1 :(得分:2)

在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];

针对不同字符串格式的其他变体。

// 2018-02-28T16:38:33.6873197-05:00
// If you have this string format you can use
NSString *strDate1 = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ";

有关复杂格式的更多信息,您可以看到模式 Date Format Patterns以及Apple的官方文档Preset Date and Time StylesDate Formatters

答案 2 :(得分:0)

我面临同样的问题,总是得到nils&作为解决方案,您可以从日期字符串

中删除.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)