【问题标题】:NSDateFormatter giving incorrect output with am/ pm [duplicate]NSDateFormatter 使用 am/pm 给出不正确的输出 [重复]
【发布时间】:2013-07-27 03:57:36
【问题描述】:

下面是我用的

NSString *myDate = @"01-11-2014 10:22 PM";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm a"];
NSDate *newDate = [dateFormatter dateFromString:myDate];
NSLog(@"new date===%@=====%@", newDate, myDate);

下面是我得到的

new date===2014-11-01 19:22:00 +0000=====01-11-2014 10:22 PM
                      ^^

我期待的输出是

new date===2014-11-01 22:22:00 +0000=====01-11-2014 10:22 PM
                      ^^

知道出了什么问题吗?


当我有 AM 时,我有以下输出

new date===2014-11-01 07:22:00 +0000=====01-11-2014 10:22 AM
                      ^^

编辑 1

实际上,我正在做的是在 UITextField 中询问日期和时间(可悲的是,因为客户希望它以相同的方式是真实的)...然后连接此字符串并将其转换为 NSDate。

所以我有的是

 NSString myDate = [NSString stringWithFormat@"%@ %@", appDate, appTime];

【问题讨论】:

  • 对我来说似乎是时区问题。您的 myDate 有时区吗?
  • @Jamie :不,它只是一个字符串..
  • 这不是时区问题,是正确的。如果使用NSLog(),日期的-description 方法将用于格式化日期。它的实现使用 UTC,而不是本地时区。您使用字符串指定的日期可能是 UTC 时间 19:22。
  • 对..所以你从某个已经计算了时区的地方获取时间。
  • @JoshCaswell : 谢谢你的很多很多... :D

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

添加这行代码:

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

您可能输入了错误的时区。您必须将时区设置为您的时区。

【讨论】:

  • 我认为你应该解释一下这个问题。
猜你喜欢
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多