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

时间:2016-06-10 10:20:20

标签: objective-c iphone nsdate uidatepicker

我已经使用完成和取消按钮创建了一个自定义的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 :(得分:0)

当我检查您的代码时,您NSLog NSDate对象NSDateNSDate日志不确定返回正确NSDate因为-(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; } 返回当前时间GMT时区如下所示是将GTM时区进行位计算到当地时区的代码:

NSDate

我与here

的项目有牵连

其他方法是你可以使用正确的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; } 转换为字符串,它将显示正确的日志,如下所示:

public interface IPerson
{
    int Age { set; }
}

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