Search code examples
iosobjective-cxcodecocoa-touchnsdateformatter

Converting DatePicker Date to UTC Format returns NULL


I have 4 UITextfileds, start date, start time and end date, end time. Then I'm sending my date and time into my UTC function, but it's returning null.

NSString *str1 = _startDateField.text;
str1 = [str1 stringByAppendingString:@" "];
str1 = [str1 stringByAppendingString:_startTimeField.text];
NSLog(@"str1 : %@", str1);
NSString *str2 = _endDateField.text;
str2 = [str2 stringByAppendingString:@" "];
str2 = [str2 stringByAppendingString:_endTimeField.text];
NSLog(@"str2 : %@", str2);
// Convert string to date object
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MMM-yyyy HH:mm"];
NSDate *date1 = [dateFormat dateFromString:str1];
NSDate *date2 = [dateFormat dateFromString:str2];
NSLog(@"%@", date1);
NSLog(@"%@", date2);
NSString *startTime = [self getUTCFormateDate:date1];
NSString *endTime = [self getUTCFormateDate:date2];
NSLog(@"str1 : %@", startTime);
NSLog(@"str2 : %@", endTime);

Coverting to UTC format:

-(NSString *)getUTCFormateDate:(NSDate *)localDate {
    NSLog(@"%@", localDate);
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setTimeZone:timeZone];
    [dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm"];
    NSString *dateString = [dateFormatter stringFromDate:localDate];
    NSLog(@"%@", dateString);
    return dateString;
}

I want to read the date and time from my text fields and convert them into UTC format.


Solution

  • your code is fine and correct, I added the defaultTimeZone for get the time zone and subtract the time to utc time. I got the output.

    check this

    NSString *str1 = @"26-Nov-2019";
    str1 = [str1 stringByAppendingString:@" "];
    str1 = [str1 stringByAppendingString:@"9:35 am"];
    NSLog(@"str1 : %@", str1);
    NSString *str2 = @"26-Nov-2019";
    str2 = [str2 stringByAppendingString:@" "];
    str2 = [str2 stringByAppendingString:@"11:59"];
    NSLog(@"str2 : %@", str2);
    
    // Convert string to date object
    NSDate *date1 = [self getUTCDate:str1];
    NSDate *date2 = [self getUTCDate:str2];
    
    NSLog(@"date1 %@", date1);
    NSLog(@"date2 %@", date2);
    
    NSString *startTime = [self getUTCFormateDate:date1];
    NSString *endTime = [self getUTCFormateDate:date2];
    NSLog(@"str1 : %@", startTime);
    NSLog(@"str2 : %@", endTime);
    
    
    -(NSDate *)getUTCDate:(NSString *)currentDate {
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd-MMM-yyyy HH:mm"];
    
        NSDate *date1 = [dateFormat dateFromString:currentDate];
        if (date1 == nil) {
             [dateFormat setDateFormat:@"dd-MMM-yyyy hh:mm a"];
             date1 = [dateFormat dateFromString:currentDate];
        }
        return date1;
    }
    
    -(NSString *)getUTCFormateDate:(NSDate *)localDate {
        NSLog(@"%@", localDate);
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
        [dateFormatter setTimeZone:timeZone];
        [dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm"];
        NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
        dateFormatter.locale = twelveHourLocale;
        NSTimeInterval timeZoneoffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
        NSTimeInterval utcTimeInterval = [localDate timeIntervalSinceReferenceDate] - timeZoneoffset;
        NSDate *utcCurrentDate = [NSDate dateWithTimeIntervalSinceReferenceDate:utcTimeInterval];
        NSString *dateString = [dateFormatter stringFromDate:utcCurrentDate];
        NSLog(@"dateString %@", dateString);
        return dateString;
    }