【问题标题】:Getting wrong time while converting from NSString to NSDate When Device Time format is 24hr当设备时间格式为 24 小时时,从 NSString 转换为 NSDate 时出现错误的时间
【发布时间】:2017-07-03 09:16:07
【问题描述】:

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

当我的设备时间格式为 12 小时时,以下代码运行良好。日期格式为[dateFormatter setDateFormat:@"dd-MMM-yyyy hh:mm a"]; 它给了我正确的日期和时间。

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

我检查了很多关于 NSDateFormatter 和将 NSString 转换为 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

【问题讨论】:

  • 转换 24 小时格式,格式字符串中不需要 'a'
  • 您的代码错误。 HH 是 24 小时制。但是你在后面加了一个。您应该改用 hh。
  • @DSDharma 如果我删除 'a' 它会给出空日期。尝试使用 24 小时时间格式的代码。在您的设备中。
  • @GeneCode 我用 hh 表示 12 小时格式,它给了我正确的日期和时间。只需使用 24 小时时间格式尝试此代码。在您的设备中,它给出了 null。
  • 答案已更新,请查看

标签: ios objective-c datetime nsdate nsdateformatter


【解决方案1】:

请尝试设置地区和时区

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 以获得解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
相关资源
最近更新 更多