2017-07-03 93 views
0

在下面的代码中,我试图将NSString转换为NSDate并再次转换为另一种日期格式并将其发送到服务器。从NSString转换到NSDate时出错时间当设备时间格式为24小时

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

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

我查了很多计算器问题有关NSDateFormatter和转换NSStringNSDate。但是我无法知道我在哪里出错,为什么当我的设备时间格式为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小时。这是正确的。
从日期时间2017-07-04T13:46:00

时候,我的设备时间格式为24小时。这是错误的(具体时间)。
从日期时间2017-07-04T12:46:00

+0

转换24小时制没有必要的 'A' 在格式字符串 –

+1

您的代码错误。 HH是24小时格式。但你在后面添加一个。你应该用hh来代替。 – GeneCode

+0

@DSDharma如果我删除'a'它会给出空日期。尝试使用时间格式24小时的代码。在您的设备中。 –

回答

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); 
+1

设置区域设置是重要的。感谢帮助,正确答案+1解决方案。 –

相关问题