将 DatePicker 日期转换为 UTC 格式返回 NULL
Posted
技术标签:
【中文标题】将 DatePicker 日期转换为 UTC 格式返回 NULL【英文标题】:Converting DatePicker Date to UTC Format returns NULL 【发布时间】:2020-03-21 11:10:32 【问题描述】:我有 4 个 UITextfiled,开始日期、开始时间和结束日期、结束时间。然后我将日期和时间发送到我的 UTC 函数中,但它返回 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);
转换为UTC
格式:
-(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;
我想从我的文本字段中读取日期和时间并将它们转换为 UTC 格式。
【问题讨论】:
显示您输入的日期字符串 我输入的日期字符串类似于“26-Nov-2019 10:34” 显示你的NSLog(@"str1 : %@", str1); and NSLog(@"str1 : %@", str1)
开始日期:2019 年 11 月 26 日开始时间:10:35,结束日期:2019 年 11 月 26 日,结束时间:11:59
你期望的输出是什么
【参考方案1】:
您的代码很好且正确,我添加了 defaultTimeZone 以获取时区并将时间减去 utc 时间。我得到了输出。
检查一下
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;
【讨论】:
它开始了,但问题是结束时间是上午 11:15,结束时间是:晚上 9:15 @ios - 我无法理解,请详细说明。 当我用上午和下午发送时间时,它没有得到。怎么样? 这是我的完整开始日期时间(2019 年 11 月 26 日上午 11:29),结束日期和时间(2019 年 11 月 26 日晚上 11:29) @iOS - 哦,你的时间是 12 小时而不是 24 小时,否则你需要同时处理两个时间以上是关于将 DatePicker 日期转换为 UTC 格式返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章