我正在尝试合并电子邮件日期,但日期格式化程序返回nil,其中最后五个字符为-0800。日期为+0000没问题。我有以+0000和-0800结尾的电子邮件的混合日期列表
我该如何在我的日期中加上8个小时的差值使其变为+0000?一些电子邮件从洛杉矶日期始发于2020年1月13日05:22:03 -0800。但是,我在英国的访问时间相差8小时。
2020年1月13日05:22:03 -0800应该看起来像2020年1月13日13:22:03 +0000
- (NSDate *) date
{
NSString *d = [headers objectForKey:@"date"];
if (d == NULL)
return NULL;
NSRange rng = [d rangeOfString:@" ("];
if (rng.location != NSNotFound)
d = [d substringToIndex:rng.location];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease]];
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
NSDate *result = [formatter dateFromString:d];
[formatter release];
return result;
}
2020年1月13日05:22:03 -0800是特定日期返回nil。任何帮助都可以申请。
我尝试了以下声明
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease]];
[formatter setLocale:[[NSLocale currentLocale] autorelease]];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zz"];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzzz"];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZZ"];
答案 0 :(得分:0)
日期字符串不包含工作日,因此说明符EEE
仍然是错误的。
将语言环境设置为en_US_POSIX
,并使用格式dd MMM yyyy HH:mm:ss Z
顺便说一句,语法更短,更方便
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.dateFormat = @"dd MMM yyyy HH:mm:ss Z";
您可以在unicode.org上找到格式说明符的完整列表