【发布时间】:2017-02-15 23:15:14
【问题描述】:
我们在使用 Objective-c 开发的现有 iOS 应用程序中收到了一个问题。
问题:输出日期前移一天,仅适用于 PST 时区。
我们编写了以下代码,用于将日期转换为短格式。
-(NSString *)getDisplayDateFormat:(NSString *)dateString
{
NSLocale *enUSPOSIXLocale;
NSDateFormatter *inputformatter = [[NSDateFormatter alloc] init];
enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
[inputformatter setLocale:enUSPOSIXLocale];
inputformatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
[inputformatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssSSSZZZZ"];
NSDate *date= [inputformatter dateFromString:dateString];
NSDateFormatter *OutPutformatter = [[NSDateFormatter alloc] init];
[OutPutformatter setDateFormat:@"yyyy-MM-dd"];
NSString *dispalyDateString = [OutPutformatter stringFromDate:date];
return dispalyDateString;
}
输入日期字符串 = 2017-01-16T00:00:00-06:00
UTC 格式:日期 = 2017-01-16 06:00:00 +0000
输出日期字符串 = 2017-01-15
请帮助我们解决问题。
【问题讨论】:
-
没有错。你所看到的是预期的。不仅仅是 PST(美国西海岸)。对于时区偏移大于 -6(更西部)的任何设备,它将显示 1 月 15 日。
-
2017-01-16T00:00:00-06:00(例如芝加哥 1 月 16 日凌晨的午夜),洛杉矶 1 月 15 日晚上 10 点。所以你的输出是有意义的。问题是你更广泛的目标是什么。你是说你不在乎什么时候发生的事情,只关心它发生在哪一天?那么您可能根本不应该在日期字符串中包含时间部分。退后一步,您应该编辑您的问题以描述更广泛的设计目标,我们可以建议如何解决它。
-
感谢您的澄清,我从服务器获取日期“2017-01-16T00:00:00-06:00”,需要转换为 2017-01-16。请提出建议。
-
如果日期字符串没有反映某个时刻,而只是反映了一个日期,那么您确实应该更改 Web 服务以仅返回日期。实际上,您应该只获取前 10 个字符,然后通过格式化程序运行它。
标签: ios objective-c nsdate nsdateformatter rfc3339