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

Format date string with .000Z into 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 始终为零。

我遇到了同样的问题,总是得到 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)

这对我有用

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

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

// 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 and the Apple's official documentation Preset Date and Time Styles and Date Formatters