NSSate到NSDate错误的一天

时间:2013-12-31 09:32:43

标签: ios objective-c

我有这段代码:

NSDateFormatter* df = [[NSDateFormatter alloc] init];
df.locale = [NSLocale currentLocale];
df.timeZone = [NSTimeZone localTimeZone];
df.timeStyle = NSDateFormatterShortStyle;
df.dateStyle = NSDateFormatterShortStyle;
df.locale = [NSLocale currentLocale];
[df setDateFormat:@"dd/MM/yyyy"];
NSString *todaysDate = @"31/12/2013";
NSDate* today = [df dateFromString:todaysDate];

NSLog(@"comparing todaysDate: %@ with today: %@",todaysDate,today);

当我检查我的控制台时,我看到今天的日期是2013年12月31日,今天是2013-12-30 21:00:00 +0000我不明白为什么它会过去1天...任何人都可以帮我出去吗?我试图基本上根据日期过滤字典中的一些项目。过滤此处未包含的部分,因为确定dateFromString未执行其工作。

3 个答案:

答案 0 :(得分:9)

很可能是因为你的TimeZone。你似乎是GMT + 3或类似的东西。如果您更改本地时区,则一切正常。

您应该使用:df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]:代替localTimeZone,即使在不同的时区也能始终获得相同的结果。

答案 1 :(得分:2)

将以下内容添加到您的NSDateFormatter。

[df setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

答案 2 :(得分:-4)

当我使用日期编程时,我总是使用此代码,很抱歉,我无法帮助您使用NSString NSDate,因为我自己不使用该代码

雇佣是解决问题的方法:

#include <ctime>
#include <iostream>
using namespace std;

int main() {
time_t t = time(0);   // get time now
struct tm * now = localtime( & t );
cout << (now->tm_year + 1900) << '-' 
     << (now->tm_mon + 1) << '-'
     <<  now->tm_mday
     << endl;
}