我有这段代码:
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未执行其工作。
答案 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;
}