Почему мой NSDate неправильно отформатирован? - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть NSDate, который неправильно отформатирован.

Я объявил UITextField в .h:

@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:

Я ознакомился с принятым ответом на этот вопрос Как преобразовать NSStrings в 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 голосов
/ 04 ноября 2018

В итоге оказалось, что мой код был в порядке. Единственное, что я не заметил, что Дата была объявлена ​​как String в Parse, а не как Date.

0 голосов
/ 04 ноября 2018

Ну, вот и все. Мне нужно иметь NSDate, потому что я храню даты.

Вы, кажется, неправильно понимаете разницу между NSDate и тем, что вы получаете от NSDateFormatter. NSDate - это просто класс, в котором дата хранится без определенного формата - он хранит информацию внутри объекта. Если вы хотите отобразить дату в определенном формате, вам нужно создать строку из даты, и вы используете NSDateFormatter для преобразования даты в строку, которая выражает дату в формате, который вы необходимо.

Если вы печатаете дату на консоли, используя NSLog(), например:

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

затем NSLog будет просто использовать метод даты description, который дает вам своего рода выражение даты по умолчанию. Если вы хотите записать дату в каком-то определенном формате, вам нужно настроить форматер даты с этим форматом и затем использовать его:

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