首页 文章

在低于或高于最小或最大日期后一天前的UIDatepicker日期

提问于
浏览
1

我已经使用完成和取消按钮创建了一个自定义datePickerView .

- (id)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]) {
    }
    return self;
}

-(void)setupWithMinimumDate:(NSDate *)minimumDate andMaximumDate:(NSDate *)maximumDate andTag:(NSInteger)tag{
    viewToolbar.backgroundColor = [UIColor toolbarBackgroundColor];
    datePicker.datePickerMode = UIDatePickerModeDate;
    datePicker.timeZone = [NSTimeZone localTimeZone];
    datePicker.locale = [NSLocale currentLocale];

    datePicker.minimumDate = minimumDate;
    datePicker.maximumDate = maximumDate;
    tagValue = tag;
}

-(IBAction)doneTapped:(id)sender{
    [self.delegationListener didTapDone:datePicker.date andTag:tagValue];
}

-(IBAction)cancelTapped:(id)sender{
    [self.delegationListener didTapCancel];
}

-(IBAction)datePickerValueChanged:(UIDatePicker *)sender{
    NSLog(@"DATE = %@",sender.date);
    datePicker.date = sender.date;
}

您在 datePickerValueChanged 中看到了Log语句 . 当我保持在最小和最大日期之内时,它会让我回到正确的日期 . 但是当我在我的最小或最大日期之上或之下滚动时,它总是返回一个比所选日期提前一天的日期 .

我知道当我使用 NSDateFormatter 格式化日期时,它会返回正确的日期字符串 . 但问题是,我将从datePicker收到的日期存储在Realm对象上 .

现在,我发送到需要使用UTC时区进行日期格式化的网络服务器的领域对象 . 所以我总是发送一天前的日期 .

我希望它有点清楚,如果没有请问!

1 回答

  • 0

    当我检查你的代码时你是 NSDateNSDate 对象,但 NSDate 日志不确定返回正确的 NSDate 因为 NSDate 返回GMT时区的当前时间所以以下是将GTM时区进行位计算到当地时区的代码:

    -(IBAction)datePickerValueChanged:(UIDatePicker *)sender{
        NSTimeZone* GTMTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
        NSTimeZone* SystemTimeZone = [NSTimeZone systemTimeZone];
    
        NSInteger GTMOffset = [GTMTimeZone secondsFromGMTForDate:sender.date];
        NSInteger Systemoffset = [SystemTimeZone secondsFromGMTForDate:sender.date];
        NSTimeInterval interval = Systemoffset - GTMOffset;
    
        NSDate* correctDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sender.date];
        NSLog(@"DATE = %@",correctDate);
        datePicker.date = correctDate;
    }
    

    here我被牵连到我的项目中

    其他方法是你可以将 NSDate in转换为正确的dateformate和nslog,它将显示正确的日志,如下所示:

    -(IBAction)datePickerValueChanged:(UIDatePicker *)sender{
    
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSLog(@"Todays date is %@",[formatter stringFromDate:sender.date]);
    
        datePicker.date = sender.date;
    }
    

    因此您可以将日期存储为字符串并将其发送到您的后端,希望对您有所帮助

相关问题