为什么我的NSDate格式不正确?

时间:2018-11-03 20:03:24

标签: objective-c datepicker uitextfield nsdate

我有一个NSDate格式不正确。

我在.h中声明了UITextField

@property (weak, nonatomic) IBOutlet UITextField *datetimeTextField;

然后我有一个第三方UIPicker,它会选择一个日期并将其插入提到的TextField中:

// Method to avoid diplaying the keyboard. 
    -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
        ActionSheetDatePicker *datePicker = [[ActionSheetDatePicker alloc]initWithTitle:@"Select Date and Time" datePickerMode:UIDatePickerModeDateAndTime selectedDate:[NSDate date] doneBlock:^(ActionSheetDatePicker *picker, id selectedDate, id origin) {

        // As you can see here it's taking the correct (non-formatted) date
        NSLog(@"Selected %@", selectedDate); // VALUE = Sat Nov 10 10:00:41 2018

        //create a date formatter
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        //set its format as the required output format
       [formatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];

        //get the output date as string
        NSString *selectedDateString = [formatter stringFromDate:selectedDate];

        self.datetimeTextField.text = selectedDateString;

        // And here I get the value I want to store in Parse stored in datetimeTextField.text

        NSLog(@"Selected After reformat %@", self.datetimeTextField.text); // VALUE = 10-11-2018 00:35:06

    } cancelBlock:^(ActionSheetDatePicker *picker) {

    } origin:self.view];
    datePicker.minuteInterval = 5;
    [datePicker showActionSheetPicker];

 return NO;
 }

我的问题开始于必须调用IBAction将此NSDate存储在我的Parse Cloud中(我的Date列仅接受NSDate

- (IBAction)createeventAction:(id)sender{

   // Here I "catch" the value previously stored from the Picker. 
   NSString *dateString =  datetimeTextField.text; //// 07-11-2018 22:00:42 (correct format)

   // Here I convert the NSString into NSDate with the same formatting
   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   [dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
   NSDate *date = [dateFormatter dateFromString:dateString];

   // But for some reason, date prints incorrectly. 
   NSLog(@"DATE in here ====>>> %@", date); // Sat Nov 10 10:00:41 2018

 }

问题:

我想在不丢失格式的情况下将NSString(datetimeTextField.text)转换为NSDate。

编辑1:

我已经咨询了How to convert NSStrings to NSDate这个问题的可接受答案,但是由于某些原因,它对我不起作用。

编辑2:

更清楚地说:

将NSDate转换为NSString的代码。

// We have a date (not formatted) => Sat Nov 10 10:00:41 2018 
//create a date formatter
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
NSString *selectedDateString = [formatter stringFromDate:selectedDate];
self.datetimeTextField.text = selectedDateString;
// Date formatted => 10-11-2018 00:35:06

将NSString转换回NSDate的代码:

NSString *dateString =  datetimeTextField.text; // 10-11-2018 10:00:41 (correct format)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];
NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"DATE in here ====>>> %@", date); // Sat Nov 10 10:00:41 2018 (not formatted. WHY?)

2 个答案:

答案 0 :(得分:1)

  

就是这样。我需要一个NSDate,因为我要存储日期。

您似乎误解了NSDate与从NSDateFormatter得到的收益之间的区别。 NSDate只是一个类,它不以特定的格式存储日期-它在对象内部存储信息。如果要以特定格式显示日期,则需要从该日期创建一个 string ,然后使用NSDateFormatter将日期转换为表示日期的字符串。您需要的格式。

如果您使用NSLog()将日期打印到控制台,例如:

NSLog("My date is %@", myDate);

然后,NSLog将仅使用日期的description方法,该方法为您提供了日期的默认表达式。如果要以某种特定格式记录日期,则需要使用该格式设置日期格式化程序,然后使用它:

NSLog("My formatted date is %@", [myFormatter stringFromDate:myDate]);

答案 1 :(得分:0)

最后,事实证明我的代码很好。唯一的事情是,我没有注意到Date在Parse中被声明为String而不是Date。