生成此类型的 NSDate:2015-04-27T10:45:52Z

Generate NSDate of this type: 2015-04-27T10:45:52Z

我正在尝试通过以下方式将日期设置为 PayPal 预批准密钥:

@"2015-04-27T10:45:52Z", @"startingDate",

这个日期有效,但我不知道如何用代码重现它。我尝试这样做:

NSDateFormatter *dateformate=[[NSDateFormatter alloc]init];
[dateformate setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"]; // Date formater
NSString *date = [dateformate stringFromDate:[NSDate date]];

但这不起作用。日期末尾的 Z 是多少?

首先,您的日期格式不正确。其次,为了获得一致的结果,您应该始终对 en_US_POSIX 语言环境进行硬编码(日期格式化程序默认为用户的语言环境):

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

或者,我对 iso-8601-date-formatter 有过积极的体验。 ISO 8601 是一个非常复杂的标准,有 很多 边缘情况,而这个库似乎能够处理其中的大部分。

Z代表祖鲁语(即UTC/GMT)。如果您想生成该格式的日期字符串(带有 Z 限定符的 GMT),请参考 Apple's Technical Q&A #1480,它提醒我们同时指定 localetimeZone

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

或者在 macOS 10.12 和 iOS10 中,您可以:

NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];

然后你可以做:

NSString *dateString = [formatter stringFromDate:[NSDate date]];