gpt4 book ai didi

objective-c - 存储绝对 NSDate,而不是相对于时区

转载 作者:可可西里 更新时间:2023-11-01 03:49:39 25 4
gpt4 key购买 nike

我正在创建一个 iOS 应用程序来跟踪出勤情况。每个考勤条目都存储在一个对象中,该对象具有一个状态属性(例如出席、缺席)和一个名为 dateNSDate 属性,该属性表示考勤记录的日期。当我选择一个特定日期(使用 UIDatePickerView 或类似工具)时,我希望该日期的所有出勤记录(对象)都显示在表格 View 中。

虽然这在原则上听起来很简单,但我遇到了与时区相关的问题。我知道 NSDate 的存储独立于时区(即它们相对于 UTC/GMT +0000 存储)。这意味着,如果我在悉尼并参加了例如 2012 年 11 月 4 日星期日的考勤,因为该日期存储为独立于时区的,如果我将我的 iPhone/iPad 带到不同的时区(例如旧金山),则所有考勤记录会倒退一天,在本例中是 2012 年 11 月 3 日星期六,因为那是旧金山本地时间(实际上是第二天,悉尼本地时间)的考勤时间。

我不希望这种情况发生 - 我希望日期是绝对的。换句话说,如果出席是在 2012 年 11 月 4 日星期日,那么无论我去世界的哪个地方(以及哪个时区),它都需要留在那个日期。如您所见,这与日历应用程序形成鲜明对比,在日历应用程序中,约会时间需要根据时区进行更改。

如有任何关于解决此问题的更好方法的建议,我们将不胜感激。请记住,我正在使用 UIDatePickerView 选择要显示的日期,它以独立于时区的格式返回当前的 NSDate,所以我还需要一种方法来做一个简单的比较(最好在 NSPredicate 中,因为出勤对象存储在核心数据中)以获取特定日期的所有出勤对象。

最佳答案

您是否尝试过将时间转换为它的 NSDateComponents?无论时区如何,您都可以从中重新创建 NSDate。

编辑添加

// This is just so I can create a date from a string.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];


// Create a date as recorded in a timezone that isn't mine.
NSDate *localDate = [formatter dateFromString:@"2012-10-30 10:30:00 +0200"];
NSLog(@"Initial Date: %@", localDate);
// this logs 2012-10-30 08:30:00 +0000
// Which is what you would expect, as the original time was 2 hours ahead

NSDateComponents *components = [[NSDateComponents alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
components = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:localDate];

NSLog(@"Components: %@", components);


// Create a date from these time components in some other time zone
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSDate *newDate = [gregorian dateFromComponents:components];

NSLog(@"New Date: %@", newDate);
// This logs 2012-10-30 12:30:00 +0000
// Which is the local EST of 8:30 am expressed in UTC

这演示了我如何让 +2 时区的上午 8:30 看起来与 -4 时区相同。

关于objective-c - 存储绝对 NSDate,而不是相对于时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13215895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com