从NSString转换为NSDate时出错时间设备时间格式为24小时

时间:2017-07-03 09:16:08

标签: ios objective-c datetime nsdate nsdateformatter

在以下代码中,我尝试将NSString转换为NSDate,然后再次转换为另一种日期格式并将其发送到服务器。

当我的设备时间格式为12小时时,以下代码工作正常。使用dateformat到[dateFormatter setDateFormat:@"dd-MMM-yyyy hh:mm a"];,它给了我正确的日期和时间。

但是一旦我将设备时间格式更改为24小时。并将datefomatter更改为[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm a"];它会给出错误的日期和时间(特别是时间。)我已经显示了代码的日志值。

我检查过很多关于NSDateFormatterNSString转换为NSDate的stackoverflow问题。但我无法找出我犯错误的地方,以及为什么当我的设备时间格式为24小时时,它给了我错误的时间。请帮我解决这个问题。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm a"];
NSString *fromTime = [NSString stringWithFormat:@"%@",@"04-Jul-2017 01:46 PM"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:fromTime];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSString *setdtFrom=[dateFormatter stringFromDate:dateFromString];
NSLog(@"From DateTime %@",setdtFrom);

以下日志显示日期和时间我的设备时间格式为12小时。它是正确的。
From DateTime 2017-07-04T13:46:00

我的设备时间格式为24小时的时间。这是错误的(特别是时间)。
From DateTime 2017-07-04T12:46:00

1 个答案:

答案 0 :(得分:0)

请尝试设置区域设置&时区

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MMM-yyyy hh:mm a"];
    [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"]];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    NSString *fromTime = [NSString stringWithFormat:@"%@",@"04-Jul-2017 01:46 PM"];
    NSDate *dateFromString = [dateFormatter dateFromString:fromTime];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
    NSString *setdtFrom=[dateFormatter stringFromDate:dateFromString];
    NSLog(@"From DateTime %@",setdtFrom);