仅将日期作为 NSDate 添加到核心数据中

发布于 2024-12-17 21:48:01 字数 826 浏览 0 评论 0原文

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

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

这给了我一个格式的时间

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

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

+ (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 格式的日期?

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

问候, 我懂了

I have a web service that returns a JSON object. The response consists of a refreshTime in UNIX timestamp (milliseconds) format. I convert the UNIX time stamp to NSDate by the following code:

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

This gives me a time in the format

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

I am only interested in the date object here. This is important since the day is used in NSSortDescriptor and also as section header in tableview and hence I separate the date and time with the following code:

+ (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];
}

The problem here is the returned NSDate object still contains a junk time value. Is there any way to store only the date in NSDate format?

Can someone help me with this?

Regards,
iSee

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

奢华的一滴泪 2024-12-24 21:48:01

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

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

NSDate has to have a time - it is a number of seconds since a reference date, it represents a specific point in time.

If you are only interested in the day/month/year sections, the correct way to deal with this is to use a date formatter or date components when presenting the date, rather then when you store it. Alternatively, store the date as a string, but this way you lose any date functionality.

全部不再 2024-12-24 21:48:01

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

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

Two possible solutions, both not very pretty:

  1. Take the NSTimeInterval from the date, then truncate it down to the nearest 60*60*24 (seconds*minutes*hours). Something like interval = floor(interval - interval % (60*60*24)). Create a new date from that.
  2. Convert the date into a string showing only the date, then convert that string back to NSDate (might still have junk time components, though, but you can pad the string with 0 values).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文