【问题标题】:Formatting NSDate格式化 NSDate
【发布时间】:2013-12-05 09:16:20
【问题描述】:

我在比较 NSDate 时遇到了一些问题,因为它们的格式不同。

从一方面来看,我有一个 NSDate,他看起来像这样:

2013-12-05T10:12:00.120Z

另一方面,我有另一个 NSDate,看起来是这样的:

2013-12-01 10:1200 +00000

我的问题是,我怎样才能让第一个 NSDate 看起来像第二个? 更重要的是,120Z是什么意思?我想这是时区,但我不太确定。 顺便问一下,有没有什么办法可以格式化NSDate's并根据时区小时差更新时间?

非常感谢!

已编辑:

要获得第一个 NSDate,我执行以下操作(我需要获得文件的最后打开日期):

MDItemRef item = MDItemCreate(NULL, (__bridge CFStringRef)filePath);
NSDate *date = (NSDate*)CFBridgingRelease(MDItemCopyAttribute(item,
kMDItemLastUsedDate));

为了获得第二个 NSDate,我执行以下操作:

 NSDate* threeDaysAgo = [NSDate dateWithTimeIntervalSinceNow:-259200];

【问题讨论】:

  • 所以你有两个 NSStrings,每个代表一个日期和时间,但使用不同的格式,你想要做的是将它们转换为 NSDate 对象?
  • 两者都是 NSDates,我只是这样得到一个: NSDate* threeDaysAgo = [NSDate dateWithTimeIntervalSinceNow:-259200];我接到另一个电话给 CFBridgingRelease。这就是为什么我得到两种不同的格式。当尝试比较它们时,我得到一个错误
  • NSDates 没有格式。您能说明日期是如何创建的以及如何比较它们吗?
  • “120Z 是什么意思?” - 10:12:00.120 是时间,120 是毫秒部分。 Z 代表“Zulu”,与 GMT 相同。
  • 非常感谢大家,我刚刚更新了我的问题以便更容易理解所有内容

标签: objective-c nsdate nsdateformatter


【解决方案1】:

将两个 dateStrings 转换为 NSDate,然后您可以轻松地比较 dateObjects。

要将字符串转换为您需要的日期:

NSDateFormatter

比较两个日期:

resultant = [dateOne compare:dateTwo]

resultant 可以是NSOrderedAscendingNSOrderedSameNSOrderedDescending

【讨论】:

  • 两者都是 NSDates,我这样得到一个: NSDate* threeDaysAgo = [NSDate dateWithTimeIntervalSinceNow:-259200];我接到另一个电话给 CFBridgingRelease。这就是为什么我得到两种不同的格式。当尝试比较它们时,我得到一个错误
  • 两者都不能是日期。您可以通过打印其类名来检查。日期具有默认格式,而您说的却不同
  • 非常感谢,我刚刚更新了我的问题,也许现在更容易理解了。是的,两者都是 NSDates,我已经打印了它们并且有不同的格式
【解决方案2】:

您对NSDate 是什么有误解。它根本不是“格式”,但实际上是围绕 a double 的包装器,这是自 1970 年 1 月 1 日凌晨 12:00 UTC 以来的秒数。您可以直接比较两个日期,看看哪个日期较早。但是,如果您要比较是否相等,那就更棘手了。如果您想查看它们是否在一分钟内,您可以执行类似的操作

 [date1 timeIntervalSinceDate: date2] < 60.0;

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多