【问题标题】:NSDateFormatter return incorrect date from stringNSDateFormatter 从字符串返回不正确的日期
【发布时间】:2012-01-09 03:38:02
【问题描述】:

我有办法,

+ (NSDate *) convertToDateFrom:(NSString *) dateString
{
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"];

    NSDate *date = [df dateFromString:dateString];

    return date;
}

当我经过时,

@"Monday, 21 November 2011 17:01" //Passed string

它返回一个错误的日期,

2011-11-21 23:14:00 +0000 // Output

我不确定我是否正确使用了这些标志,或者 NSDateFormatter 没有正确地将我的字符串转换为日期。

我做错了吗?

谢谢

【问题讨论】:

  • 嗯,首先它返回了正确的日期,只是错误的时间。如果您真的在 17:01 喂食并在 23:14 回来,那么您可能正在查看错误的 NSDate 对象,因为没有合理的时区设置会产生该偏移量。

标签: objective-c ios nsdate nsdateformatter


【解决方案1】:

日期末尾的+0000 表示格林威治标准时间。所有日期都相对于 GMT 存储;当您使用日期格式化程序将日期转换为字符串或反之亦然时,会包括您所在时区的偏移量。您可以使用 NSDateFormatter 的-setTimeZone: 方法来设置使用的时区。

简而言之,您的代码没有做错任何事情。使用[df stringFromDate:date]; 查看日期是否正确。 (也可以使用NSDate的-descriptionWithCalendarFormat:timeZone:locale:。)

【讨论】:

  • 当我询问 descriptionWithLocale 时,它​​似乎是一个错误,它让我得到了正确的结果,有趣!
  • "description"(如果您只是将 NSDate 对象记录为对象,则默认情况下会得到该描述)向您显示 UTC 时间。
  • 我无法获得准确的时间,但日期是正确的。我将此日期用于 EkEvent 并将事件存储到 iPhone 中的默认日历。在这种情况下,时间不匹配。请帮助我...跨度>
  • @user1980105 在 cmets 中很难提供帮助 - 请发布您自己的问题,并附上您的情况和相关代码的详细信息。
【解决方案2】:

尝试使用

df stringFromDate:date

以下是我的工作,

NSLog(@"Date for locale %@: %@",
      [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]);

给我输出:

Date for locale en_US: Wednesday, 26 June 2013 15:50

【讨论】:

    【解决方案3】:

    尝试设置时区和语言环境。

    [df setLocale:[NSLocale currentLocale]];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    

    【讨论】:

    • 我试过了,但它仍然返回“2011-11-21 23:14:00 +0000”
    • 如果我可以建议一些简单的阅读:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
    • 当我询问 descriptionWithLocale 时,这似乎是一个错误,它给了我正确的结果,有趣!结果结果在 description 和 descriptionWitLocale 之间有所不同...一个小时的差异 :(
    • 不幸的是,时间和日期从来都不是一件容易的事,考虑到时间和日期会随地点而变化,再加上夏令时和闰年,日期和时间没有什么是一成不变的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2021-03-07
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多