我已经使用完成和取消按钮创建了一个自定义的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时区进行日期格式化的网络服务器的域对象。所以我总是发送一天前的日期。
我希望它有点清楚,如果没有请问!
答案 0 :(得分:0)
当我检查您的代码时,您NSLog
NSDate
对象NSDate
,NSDate
日志不确定返回正确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; }
}
因此您可以将日期存储为字符串并将其发送到您的后端,希望对您有所帮助