objective-c - NSDateComponents关闭一个小时

标签 objective-c ios nsdate nsdatecomponents

尝试将这两个日期与NSDateComponents合并

“2012-09-03 00:00:00 +0000”&
“1970-01-01 08:00:00 +0000”


使用以下代码,我得到-> 2012-09-02 11:00:00 +0000

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:session.date];
    NSDate *day3 = [[NSCalendar currentCalendar] dateFromComponents:comps];

    unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:session.start];
    comps.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    day3 = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:day3 options:0];

最佳答案

找到了解决方案。

答案是:

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    cal.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; <--this is key

    NSDateComponents *comps = [cal components:unitFlags fromDate:session.date];
    comps.hour = 0;
    comps.minute = 0;
    NSDate *day3 = [cal dateFromComponents:comps];

    unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *hourComps = [cal components:unitFlags fromDate:session.start];

    day3 = [cal dateByAddingComponents:hourComps toDate:day3 options:0];

给出上述日期的结果应为2012-09-02 08:00:00 +0000

关于objective-c - NSDateComponents关闭一个小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892206/

相关文章:

ios - 自定义 UITableViewCell 不显示标签

ios - iOS停止翻转图像?

cocoa - 如何检查特定日期是否存在?

objective-c - 检查GKScore实例是否具有上下文属性

ios - 子类 awakeFromNib 调用父类(super class)自定义 init/setup 方法?

ios - UITableView 动态单元格内容

ios - 尝试连续从 Facebook 和 Twitter 分享

ios - 如何从电话号码字符串中删除几个数字 - Swift

ios - NSDate dateFromString 2个月错误吗?

ios - 如何获得毫秒级精度的nsdate?