没有从字符串获得NSDate

时间:2014-09-24 11:41:27

标签: objective-c ios7 nsstring nsdate nsdatecomponents

我在字符串格式中有以下日期“日期字符串:2014-09-28 17:30:00”

现在,我想将其转换为NSDate。

我使用了以下代码。

NSString *date = @"2014-09-28 17:30:00";
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter1 dateFromString:date];
NSLog(@"date from string: %@", dateFromString);

我得到了以下输出。

date from string: 2014-09-28 12:00:00 +0000

所以,这里时间改变了。

请告诉我,如何转换为NSDate。我在这里缺少什么?

3 个答案:

答案 0 :(得分:1)

当您将NSDate对象传递到NSLog时,它会在格林尼治标准时间打印NSDate,这可能不是您的时区(以及为什么您要获得12:00而不是17:30),这也会导致NSLog语句的输出对于在不同时区运行代码的人有所不同,所以你要做的就是调用[NSDateFormatter stringFromDate:]方法想要保持日期对象的指定时间:

所以替换这行代码:

// Will print out GMT time by default (+0000)
NSLog(@"date from string: %@", dateFromString);

这一行:

// Will honor the timezone of your original NSDate object:
NSLog(@"date from string: %@", [dateFormatter1 stringFromDate:dateFromString]);

这应该打印出你希望的价值。

// -------------------------- //

注意:了解NSDate个对象有任何时区概念非常重要,因此需要开发人员来管理和跟踪他们的时区与提供的平台方法。

在iOS上,您可以考虑使用此类:

NSTimeZone,可以帮助您在iOS平台上管理/分配您的时区。

如果您正在为OSX开发,可以使用以下方法分配时区和区域设置:-descriptionWithCalendarFormat:timeZone:locale:。 (可悲的是,这种方法仅限OSX)

希望有所帮助。

答案 1 :(得分:0)

最后在您的日志中附加了一个时区组件,这意味着将日期转换为指定的时区。其中greenwhich表示时间

因此,转换为您的时间区域设置可以为您提供正确的值

在你的第一个字符串中添加+0000到最后并再次检查你可以看到你获得的值相同。转换是在GMT格式上完成的

答案 2 :(得分:0)

访问https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

本文档提供了如何将NSString转换为日期。

此代码由Apple文档提供。

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:162000];

NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"formattedDateString: %@", formattedDateString);
// Output for locale en_US: "formattedDateString: Jan 2, 2001".

将字符串设为日期

NSString *formattedDateString = [dateFormatter stringFromDate:date];

stringFromDate: 返回使用接收者当前设置格式化的给定日期的字符串表示。

你曾经使用过什么 dateFromString: 返回使用接收者当前设置解释的给定字符串的日期表示。