从字符串设置 uidatepicker 日期

set uidatepicker date from string

问题已更新:

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

我认为这听起来合乎逻辑。但是,它对我不起作用,我不确定为什么。这是代码:

AddWorkshop.mclass

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

EditWorkshop.m class

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
 [df setDateStyle:NSDateFormatterMediumStyle];
NSDate *date1 = [df dateFromString: self.WSDate];
[self.datePicker setDate:date1];

问题是:

  1. UIDatePicker日期不会改变到指定的日期,它总是显示今天的日期。

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

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

广告 1:viewDidLoad 从您要更新的位置 UIDatePicker 仅在加载视图时调用一次。所以这可能是你的问题。尝试从 viewWillAppear:viewDidAppear:

调用方法

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

广告 3:setDate: 需要一个没有格式的 NSDate。把它想象成一个整数。

切勿将 NSDate 存储为 NSString 在您的数据库中始终尝试将其存储为时间戳,就像核心数据一样。

对于您当前的问题,下面给出的代码应该可以帮助您解决问题,我在 UIButton 上使用 IBAction,它将在 [=] 中显示转换后的 NSString 日期16=]控制。

- (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 属性检查器中将本地设置为默认值。

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

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

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

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