Ios 如何根据目标c中的工作日确定下一个最近的日期?

Ios 如何根据目标c中的工作日确定下一个最近的日期?,ios,objective-c,nsdate,nsdateformatter,Ios,Objective C,Nsdate,Nsdateformatter,为什么在格林威治标准时间内仍显示以下内容?我试图让它显示在EST多伦多,所以我把NSTimeZone设置为localTimeZone NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-dd-MM"]; NSString *todayDateString = [dateFormatter stringFromDate:[NSDate

为什么在格林威治标准时间内仍显示以下内容?我试图让它显示在EST多伦多,所以我把NSTimeZone设置为localTimeZone

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-dd-MM"];
    NSString *todayDateString = [dateFormatter stringFromDate:[NSDate dateWithTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMT]
                                                                                 sinceDate:[NSDate date]]];
    [dateFormatter setDateFormat:@"yyyy-dd-MM hh:mm:ss +0000"];

    NSDate *bus500_monday_To_Friday_T1 = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ 06:40:00 +0000", todayDateString]]; // 6:40 AM
    NSDate *bus500_monday_To_Friday_T2 = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ 07:50:00 +0000", todayDateString]]; // 7:50 AM

    NSLog(@"%@", bus500_monday_To_Friday_T2);

如果我正确理解字符串中需要今天的日期,而不是手动更改硬编码字符串,则应使用以下代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormatter setDateFormat:@"yyyy-dd-MM"];
NSString *todayDateString = [dateFormatter stringFromDate:[NSDate date]];

[dateFormatter setDateFormat:@"yyyy-dd-MM hh:mm:ss +0000"];
NSDate *bus500_monday_To_Friday_T1 = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ 06:40:00 +0000", todayDateString]]; // 6:40 AM
NSDate *bus500_monday_To_Friday_T2 = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ 07:50:00 +0000", todayDateString]]; // 7:50 AM
//use above code for all other date variables too.

// rest code would be same

在此之后,您可以使用日期比较方法来确定下一个总线时间最接近当前设备时间。

您应该首先查看NSCalendar和NSDateComponents(查看文档中的“dateFromComponents:”NSCalendart的方法谢谢我会检查的。为什么下面的代码仍然显示GMT时间?它比我希望显示的时间(多伦多东部标准时间)提前了4个小时。我认为通过指定NSTimeZone localtimeZone,它应该已经处理好了?请参阅编辑的帖子。.我添加了一行来设置系统时区。.您可以使用“NSTimeZone”设置/更改时区值,但它不起作用。当我NSLog(@“%@”,bus500_周一_至周五_T1)它显示2014-04-29 10:40:00+0000,这是不对的,应该是6:40。所以它还有4个小时,我假设从我是EST开始仍然是GMT。这就是NSLog所做的。NSDate是一个时间点,没有时区。