gpt4 book ai didi

iphone - NSDate 麻烦 - 或者如何忽略日期/时区?

转载 作者:行者123 更新时间:2023-12-03 20:16:04 28 4
gpt4 key购买 nike

好吧,我已经放弃了。这就是我想要做的:我有日出、日落和特定时区的当前时间。我想通过确定当前时间是否位于日出时间和日落时间之间来了解现在是白天还是晚上。

这是我所拥有的:

NSLog(@"%@ - %@ - %@",currTime,sunrise,sunset);

NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc]init];
[formatter1 setDateFormat:@"hh:mm a"];
[formatter2 setDateFormat:@"EEE, dd MMM yyyy h:mm a z"];
NSDate *rise = [formatter1 dateFromString:sunrise];
NSDate *set = [formatter1 dateFromString:sunset];
NSDate *time = [formatter2 dateFromString:currTime];
[formatter1 release];
[formatter2 release];

unsigned int flags = NSHourCalendarUnit | NSMinuteCalendarUnit;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components1 = [calendar components:flags fromDate:rise];
NSDateComponents *components2 = [calendar components:flags fromDate:set];
NSDateComponents *components3 = [calendar components:flags fromDate:time];

NSDate *Sunrise = [calendar dateFromComponents:components1];
NSDate *Sunset = [calendar dateFromComponents:components2];
NSDate *Time = [calendar dateFromComponents:components3];

NSLog(@"\nSunrise: %@ \nSunset:%@ \nTime:%@",rise,set,time);
NSLog(@"\nSunrise: %@ \nSunset:%@ \nTime:%@",Sunrise,Sunset,Time);

这是第一个输出:

Fri, 10 Jun 2011 4:00 am SAST - 7:46 am - 5:41 pm

这是第二个(在它只关心时间,而不是日期之前)

Sunrise: 1969-12-31 22:46:00 +0000

Sunset: 1970-01-01 08:41:00 +0000

Time: 2011-06-10 02:00:00 +0000

最后这是最后的输出(注意时间是如何困惑的?):

Sunrise: 0001-12-31 22:27:01 +0000

Sunset: 0001-01-01 08:22:01 +0000

Time: 0001-01-01 01:41:01 +0000

所以我想将这些结果日期弹出到我的方法中,检查它是否在日期之间:

+(BOOL)date:(NSDate*)date isBetweenDate:(NSDate*)beginDate andDate:(NSDate*)endDate {
return (([date compare:beginDate] != NSOrderedAscending) && ([date compare:endDate] != NSOrderedDescending));
}

但是,在我弄清楚日期问题之前,该方法将不起作用。 :/ 我需要帮助!我做错了什么?

<小时/>

好吧,所以我放弃了尝试让 NSDate 为我工作。周末的时区问题简直让我绞尽脑汁。无论如何,我决定使用 BoopMeister 建议,但它并不像我预期的那样工作。这是一个例子:

使用上面的设置,我添加了这些行:

NSInteger riseHour = [components1 hour];
NSInteger setHour = [components2 hour];
NSInteger timeHour = [components3 hour];

NSLog(@"Rise: %i Set: %i Time: %i",riseHour,setHour,timeHour);

现在,当我插入这些变量时:当前时间:2011 年 6 月 10 日星期五上午 9:07 CDT日出:上午 6:33日落:晚上 8:32

但是,当我从上面的方法输出字符串时,我得到的是:

Rise: 6 Set: 20 Time: 23

什么?

最佳答案

我会使用您已有的组件,而不是创建新日期。

从代码中的此时开始:

NSDateComponents *riseComponents = [calendar components:flags fromDate:rise];
NSDateComponents *setComponents = [calendar components:flags fromDate:set];
NSDateComponents *timeComponents = [calendar components:flags fromDate:time];

然后类似

NSInteger riseHour = [riseComponents hour];
NSInteger setHour = [setComponents hour];
NSInteger timeHour = [timeComponents hour];

// Do some checks here
// If necessary do the same for the minutes ([components minute])

比较日期一直是我的应用程序中的一个性能问题,由于您已经有了 dateComponents,因此您自己进行检查并使用 NSIntegers 会更快。

<小时/>

好的,从问题中可以看出,它给出了时间的数字表示。分钟同样有效。之后建立您的支票。

当前时间的问题可能是您使用的日历。它会自动将时间转换为您使用的日历时区的时间。您还可以使用时区的字符串表示形式创建日历。我认为它在 NSCalendar 的 API 中。然后,在您制作了该日历后,然后在当前时间使用该日历。

关于iphone - NSDate 麻烦 - 或者如何忽略日期/时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303819/

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