gpt4 book ai didi

objective-c - IsAllDay=TRUE 的 CalEvent 让我遇到时区问题

转载 作者:行者123 更新时间:2023-12-03 17:57:42 25 4
gpt4 key购买 nike

我在 CalCalendar 中的全天事件中遇到时区问题:

- (BOOL)setDayType:(NSString *)type 
forDay:(NSDate *)date;
{
NSError *err = nil;
CalEvent *e = [CalEvent event];
[e setTitle:type];
[e setIsAllDay:YES];
[e setStartDate:date];
[e setEndDate:[date dateByAddingTimeInterval:1]];
[e setCalendar:[self calendar]];
if ( ![[CalCalendarStore defaultCalendarStore] saveEvent:e span:CalSpanThisEvent error:&err] )
{
...

假设我将日期设置为 2012 年 1 月 2 日,时间为 00:00:00。我现在是 GMT+2,所以时区 +0200。我的日期对象报告 1-1-2012, 22:00:00, GMT,根据此 NSLog 输出:

"Set daytype ptd on 2012-01-01 22:00:00 +0000"

并且生成全天,甚至在 1 月 1 日!!

如何确保将所有时区的全天事件设置在正确的日期??我可以轻松添加三个小时,但这在全局范围内都行不通!

最佳答案

只要 date 是当前时区的正确日期,您就可以按原样使用它。

您看到的“问题”是因为如果您通过 NSLog 打印存储的日期(或在调试器中),它将始终显示您的 GMT 时间,因为 NSDate 不知道您所在的时区。

但是,由于 date 是一个特定的时间点,因此当您为用户格式化它(使用日期格式化程序)时,无论时区如何,它都会显示正确的日期和时间是的,只要它保持一致。

您需要担心像您提到的那样添加/减去时间的唯一情况是,如果您需要一个跨多个时区的同一日期的时间点。

编辑:
所以看起来 iCal 使用 GMT 时间来存储所有内容,因此您需要在 GMT 时区创建日期。如果您需要这方面的帮助,请在创建 NSDate 的位置发布您的代码,我很乐意为您指出正确的方向。

关于objective-c - IsAllDay=TRUE 的 CalEvent 让我遇到时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871819/

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