NSDateFormatter returns 2020 年 1 月 13 日为零 05:22:03 -0800
NSDateFormatter returns nil for date 13 Jan 2020 05:22:03 -0800
我正在尝试格式化电子邮件日期,但日期格式化程序 returns 为零,其中最后五个字符为 -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为具体日期returns无。提供任何帮助。
我试过以下语句
[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"];
日期字符串不包含工作日,所以说明符 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
上找到格式说明符的完整列表
我正在尝试格式化电子邮件日期,但日期格式化程序 returns 为零,其中最后五个字符为 -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为具体日期returns无。提供任何帮助。
我试过以下语句
[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"];
日期字符串不包含工作日,所以说明符 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
上找到格式说明符的完整列表