【问题标题】:Convert String to Date in Objective-C [duplicate]在Objective-C中将字符串转换为日期[重复]
【发布时间】:2018-08-10 15:23:35
【问题描述】:

如何在 Objective C 中将字符串转换为日期。

我尝试了以下但没有弄明白。

NSString *str = @"3/2/2018 11:44:32 AM";

NSDateFormatter *df = [[NSDateFormatter alloc] init];

[df setDateFormat:@"MM/d/yyyy h:mm:ss a"];

NSDate *resultDate = [[NSDate alloc] init];

resultDate = [df dateFromString:str];

NSLog(@"result date: %@", resultDate);

result date: 2018-03-02 06:14:32 +0000 ,but i need to get it as 
result date: 3/2/2018 11:44:32 AM

【问题讨论】:

  • 你期望的 OP 是什么
  • 结果日期:3/2/2018 11:44:32 AM
  • NSDate 总是不返回确切的 OP
  • 如果您使用之前定义的 DateFormatter,您可以看到这很好 NSLog(@"result date: %@", [df stringFromDate: resultDate]);

标签: ios objective-c iphone nsdate xcode9


【解决方案1】:

您正确地将字符串解析为Date 对象。 print 呈现它的方式是因为默认情况下,如果打印一个对象,它的description 会被打印。对于Date,它将始终是您获得的格式。但是日期是正确的。

如果您想让它以以前的方式呈现,请再次使用相同的 dateFormatter 并将日期格式化为字符串:

NSLog(@"result date: %@", [df stringFromDate:resultDate]);

更新

如果问题出在小时班,那是由于使用 DateFormatter 解析时将使用的当前时区。要克服这个问题,请明确设置日期格式化程序的时区和语言环境,请参阅此示例(快速版本,但您只需要在 dateFormatter 上设置 timeZonelocale 的这两行):

let dateString = "3/2/2018 11:44:32 AM"

let df = DateFormatter()
df.dateFormat = "MM/d/yyyy h:mm:ss a"

// set the timezone and locale of the dateformatter:
df.timeZone = TimeZone(identifier: "GMT")
df.locale = Locale(identifier: "en_US_POSIX")

let date = df.date(from: dateString)

// now it will print as you expect:
print(date)

【讨论】:

  • 结果应该在 NSDate = 3/2/2018 11:44:32 AM 中。我希望 nsdate 中的结果不在 nsstring 中
  • @Rajeev 你在resultDate 中得到的是NSDate,所以你明白了.. 那你的问题是什么?是格式,还是时区小时数的变化?
  • 但我的 resultDate 显示为 2018-03-02 06:14:32 +0000,实际上并不是我想要的
  • @Rajeev 我问你你真正想要什么.. 有什么问题?它显示 6 小时而不是 11 小时?或者它以不同的格式显示?
  • 它不会显示字符串中的确切时间吗?
【解决方案2】:

也许,这段代码会帮助你,再次指出它转换为 Nsstring 的日期,检查它这段代码

 -(void)DateChange

 {
   NSString *Input_Date =@"3/22/2018 11:44:32 AM";

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];

  NSDate * Format_date = [dateFormatter dateFromString:Input_Date];
  [dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];

   NSString *Change_date = [dateFormatter stringFromDate:Format_date];
   NSLog(@"Final Change Date :-  %@",Change_date);
}



 My Output is :- 
 Final Change Date :- 3/22/2018 11:44:32 AM

【讨论】:

  • 结果是字符串而不是 NSDate。我确实希望 NSDate 中的结果具有准确的时间
  • @Rajeev 你想以 NSDate 格式输出吗?正确
【解决方案3】:

您的问题与您的应用当前语言环境有关,如果您当前的语言环境是“en_US”,那么您的NSLog(@"result date: %@", resultDate); 行将打印

结果日期:2018 年 3 月 2 日星期五 11:44:32

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2014-05-28
    • 2013-06-19
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多