【问题标题】:iOS get Time from DateiOS 从日期获取时间
【发布时间】:2011-10-17 15:29:28
【问题描述】:

我正在开发一个应用程序,我需要解析一个实际上是这样的字符串的推文时间戳:

“2011 年 10 月 17 日星期一 10:20:40 +0000”

然而我需要的只是时间。所以我想要得到的是:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 [dateFormatter setDateFormat:@"HH:mm"];
 NSDate *date = [dateFormatter dateFromString:timestamp];

但是当我尝试使用 NSLog 打印日期时,输出为 (null),我不明白为什么。如果可能的话,我需要的是仅使用时间创建一个日期对象。事实上,稍后我需要比较不同的日期,但我只关心时间。日期是否因日、月或年而不同并不重要,重要的是我可以将它们与“timeIntervalSinceDate”进行比较以获得以秒为单位的差异。

任何帮助将不胜感激。

谢谢 麦芽酒

【问题讨论】:

    标签: iphone ios date nsdate nsdateformatter


    【解决方案1】:

    NSDATE 是一个完整的日期对象,它需要一个日期和时间。 您可以使用NSDateFormatter 仅显示时间,但您需要解析完整的字符串以获取NSDate 对象。

    这里有一些你可以使用的代码:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //Mon, 11 Jul 2011 00:00:00 +0200
    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"EN"] autorelease]];
    [dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss ZZZZ"];
    
    NSDate *date = [dateFormatter dateFromString: timestamp];
    [dateFormatter release], dateFormatter = nil;
    

    您需要设置本地以确保它以正确的语言读取时间戳。 还将 dateFormatter 分配在任何循环之外,并在完成循环后释放它。

    【讨论】:

    • 我不知道为什么当我发布推文时,它的时间戳有一个像 +0000 这样的时区。我的意思是,如果我在 21:00(iPhone 时间)发布推文,我检索它的时间是 19:00。手机上的时区设置得很好。我试图将此字符串添加到您的代码中,但没有帮助 [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+2"]]; 有什么建议吗?
    【解决方案2】:

    看看NSDateComponents。您应该能够从组件创建日期。不过,您必须自己解析时间戳(这应该很容易——只需在冒号上拆分并从每个组件中获取数字)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多