【问题标题】:Adding only date into core data as NSDate仅将日期作为 NSDate 添加到核心数据中
【发布时间】:2011-11-23 14:49:01
【问题描述】:

我有一个返回 JSON 对象的 Web 服务。响应由 UNIX 时间戳(毫秒)格式的 refreshTime 组成。我通过以下代码将 UNIX 时间戳转换为 NSDate:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[timeInUNIX objectAtIndex:i]doubleValue]/1000];

这给了我一个时间格式

2009-11-13 19:47:49 +0000

我只对这里的日期对象感兴趣。这很重要,因为日期在 NSSortDescriptor 中使用,并且在 tableview 中也用作部分标题,因此我使用以下代码分隔日期和时间:

+ (NSDate *)dateWithOutTime:(NSDate *)datDate {
    if( datDate == nil ) {
        datDate = [NSDate date];
    }
    NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:datDate];
    return [[NSCalendar currentCalendar] dateFromComponents:comps];
}

这里的问题是返回的 NSDate 对象仍然包含垃圾时间值。有没有办法只存储 NSDate 格式的日期?

有人可以帮我解决这个问题吗?

问候, 爱看

【问题讨论】:

  • 我会将此方法更改为驻留在 NSDate 上的一个类别中。称之为谎言[myDate dateWithOutTime];

标签: objective-c cocoa-touch nsdate nsdateformatter


【解决方案1】:

NSDate 必须有一个时间 - 它是自参考日期以来的秒数,它代表一个特定的时间点。

如果您只对日/月/年部分感兴趣,则处理此问题的正确方法是在显示日期时使用日期格式化程序或日期组件,而不是在存储日期时使用。或者,将日期存储为字符串,但这样您将失去任何日期功能。

【讨论】:

    【解决方案2】:

    两种可能的解决方案,都不是很漂亮:

    1. 从日期中获取 NSTimeInterval,然后将其截断为最接近的 60*60*24(秒*分钟*小时)。像间隔 = floor(interval - interval % (60*60*24)) 之类的东西。从中创建一个新日期。
    2. 将日期转换为仅显示日期的字符串,然后将该字符串转换回 NSDate(尽管可能仍然包含垃圾时间组件,但您可以使用 0 值填充字符串)。

    【讨论】:

    • 将其转换为 NSString 是唯一的选择,但我将无法根据 NSFetchController 中的日期进行排序...
    • 为了将日期排序为字符串字段,请将其存储为以下格式:YYYYMMDD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多