首页 文章

从字符串设置uidatepicker日期

提问于
浏览
0

问题更新:

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

我认为这听起来合情合理 . 然而,它不适合我,我不知道为什么 . 这是代码:

AddWorkshop.m

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

EditWorkshop.m

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

问题是:

  • UIDatePicker date would not change 到指定日期,它始终显示今天的日期 .

  • 当我尝试NSLog date1和self.WSDate时,date1的值总是 one day less 然后是 self.WSDate 的值

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

3 回答

  • 0

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

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

    广告3: setDate: 需要 NSDate ,它没有格式 . 把它想象成整数 .

  • 0

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

    对于您下面给出的当前问题是应该帮助您的代码,我在 UIButton 上使用 IBAction ,它将在 UIDatePicker 控件中显示已转换的 NSString 日期 .

    - (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

  • 0

    经过几周的尝试后,我发现问题是我在 viewDidLoad 分配和初始化我的 UIDatePicker

    self.datePicker = [[UIDatePicker alloc]init];
    

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

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

相关问题