【问题标题】:NSDate with no timeNSDate 没有时间
【发布时间】:2013-01-07 16:38:22
【问题描述】:

我写了如下方法:

- (NSDate *)stringToDate:(NSString *)dateString
{
    // Convert string to date
    NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];
    NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"America/New_York"];
    [dateFormat setDateFormat:@"M/d/yyyy HH:mm:ss"];
    [dateFormat setTimeZone:tz];
    NSDate * date = [dateFormat dateFromString:[NSString stringWithFormat:@"%@ 00:00:00", dateString]];

    return dateOnly;
}

当我只用 2013 年 11 月 1 日或 2013 年 11 月 13 日这样的日期调用它时,我得到 2013-11-01 04:00:00 +0000 和 2013-11-13 05:00:00 + 0000.

如果我在返回时设置断点,则日期显示正确,但如果我在此调用后在调用函数中中断,则返回日期和时间。

为什么我的时间不总是 0。无论如何能告诉我我的函数出了什么问题吗?

谢谢

更新:

输入字符串如下:11/1/2013 和 11/13/2013

【问题讨论】:

  • 你能把你要转换的字符串放到你的问题中吗?
  • 你的帖子有错误吗?您正在传递 2013-11-01 的日期字符串,但您的日期格式化程序是月/日/年......还是我错过了什么?
  • 错字,抱歉,我更新了帖子
  • 我制作了许多时钟和日历应用程序,vikingosegundo 的答案是正确的,您将始终拥有 UTC/GMT 时间。系统足够聪明,可以知道您的 00:00:00 表示您设置的任何日期的上午 12:00。所以不要挂在时间部分
  • 是的,我明白他在说什么,但是,这没有意义,我调用了两次,一次是 2013 年 11 月 1 日,下一次是 2013 年 11 月 13 日,两次将小时、分钟和秒设置为 00:00:00,但结果不同。

标签: objective-c ios cocoa-touch nsdate


【解决方案1】:

NSDate 是一个时间点。它总是有一个时间组件。
如果不作为 NSDateFormatter 的字符串打印,则日期和时间将始终为 UTC/GMT 之一。


格式和日期字符串必须合适。

NSString *dateString = @"11/1/2013";
[dateFormat setDateFormat:@"M/d/yyyy"];

一小时的间隔来自夏令时。直到 2013 年 11 月 3 日纽约是夏令时。 http://www.timeanddate.com/worldclock/clockchange.html?n=179


好的,我可以忽略它吗?由于时间原因,我在比较失败时尝试比较 NSDates

您应该使用一天中的某个时间(即中午)创建日期,以保存 DST 混乱并进行比较。为此使用 NSComponents。


任何 iOS/Cocoa 开发者的必看:奇妙的WWDC 2011 Video "Session 117 - Performing Calendar Calculations"

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2012-06-22
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多