从字符串设置uidatepicker日期

时间:2015-03-17 09:43:25

标签: ios objective-c nsdate uidatepicker

问题已更新:

我有一个应用程序,用户可以在其中添加一个新的研讨会,包括他从UIDatePicker中选择的研讨会日期。之后,用户可以编辑研讨会的信息,包括更改日期。我想要做的是以下内容: 1.阅读用户在添加新研讨会时从UIDatePicker中选择的时间。 2.将日期转换为字符串并将其保存在数据库中。 3.当用户想要编辑研讨会时,我应该从数据库中检索研讨会的日期并将其从字符串转换为NSDate。 4.将编辑界面中的UIDatePicker设置为我刚刚创建的NSDate

我认为这听起来很合乎逻辑。然而,它不适合我,我不知道为什么。这是代码:

<{1>}类

中的

AddWorkshop.m
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateStyle:NSDateFormatterMediumStyle]; //WSDate is a NSString variable self.WSDate = [dateFormat stringFromDate:[sender date]];

中的

EditWorkshop.m
问题是:

  1. NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateStyle:NSDateFormatterMediumStyle]; NSDate *date1 = [df dateFromString: self.WSDate]; [self.datePicker setDate:date1]; 日期不会更改到指定日期,它始终显示今天的日期。

  2. 当我尝试NSLog date1和self.WSDate时,date1的值总是减去一天,然后是UIDatePicker的值

  3. 我在[UIDatePicker setDate:NSDate]中传递的日期是否有特定格式?例如:它必须是“MMMM dd yyyy”或“mm-dd-yyyy”或任何格式都可以吗?

3 个答案:

答案 0 :(得分:0)

广告1:您要更新viewDidLoad的{​​{1}}仅在加载视图时调用一次。所以这可能是你的问题。尝试从UIDatePickerviewWillAppear:

调用该方法

广告2:这很可能是时区问题。尝试将日期存储为viewDidAppear:,而不是在NSDateNSDate之间来回转换。

广告3:NSString需要setDate:,其中没有格式。把它想象成整数。

答案 1 :(得分:0)

永远不要将NSDate作为NSString存储在您的数据库中,请始终尝试将其存储为时间戳,就像核心数据一样。

对于您当前的问题,以下是可以帮助您的代码,我在IBAction使用UIButton,它会在NSString中显示已转换的UIDatePicker日期控制。

- (IBAction)buttonPressed:(id)sender{

// set date of picker from string
NSDate *convertedDate = [self convertStringToDate];
if (convertedDate!=nil) {
    [self.datePicker setDate:convertedDate animated:YES];
}else{
    // Display any error here
}
  }

- (NSDate*)convertStringToDate{
    NSDateFormatter *SDF = [[NSDateFormatter alloc]init];
    [SDF setDateStyle:NSDateFormatterMediumStyle];
    NSDate *convertedDate = [SDF dateFromString:[self convertTodaysDateintoString]];
    return convertedDate;
   }

- (NSString*)convertTodaysDateintoString{
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateStyle:NSDateFormatterMediumStyle];
NSString *str = [df stringFromDate:[self getTodaysDate]];
return str;
}

- (NSDate*)getTodaysDate{
return [NSDate date];
}

对于第2期问题,请验证您的时区,我目前尚不确定问题3,我还没有看到UIDatePicker的任何特定日期格式,它只接受NSDate

对于3我建议检查UIDatePicker模式,同时尝试在XIB / storyboard属性检查器中将local设置为default。

XIB attribute for UIDate Picker

答案 2 :(得分:0)

经过几周的尝试后,我发现问题是我在UIDatePicker

分配和初始化viewDidLoad
self.datePicker = [[UIDatePicker alloc]init];

因此,当我使用[datePicker setDate: date];时,它不起作用。我不知道究竟是为什么。但对我来说就是这样。我刚刚删除了self.datePicker = [[UIDatePicker alloc]init];并且setDate方法有效。

如果有人可以解释为什么分配UIDatePicker使setDate方法失效,我会很高兴。我认为我需要分配所有新对象才能使用它们,因为例如当我创建一个新的NSMutableArray时,如果我不首先分配它,我就无法添加它。 谢谢大家的努力。