我在字符串格式中有以下日期“日期字符串: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。我在这里缺少什么?
答案 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)
本文档提供了如何将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: 返回使用接收者当前设置解释的给定字符串的日期表示。