将 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的主要内容,如果未能解决你的问题,请参考以下文章

将 UTC 日期格式转换为本地 nsdate

Javascript将日期转换为UTC [重复]

将 PST 中的日期与时间转换为 UTC 格式

将UTC日期格式转换为本地nsdate

无法在JavaScript中将String BST日期格式转换为UTC

iOS日期转换之UTC/GMT时间格式