Ich schreibe eine Kategorie in Xcode, die die aktuelle NSDate-Klasse erweitern würde. Ich möchte zwei Methoden hinzufügen, die ich regelmäßig verwende und irgendwie kann ich sie nicht richtig funktionieren lassen.NSDate für heute mit 00:00:00 als Zeit erhalten
Zur Zeit habe ich diesen Code:
+ (NSDate*) today
{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [todayComponents day];
NSInteger theMonth = [todayComponents month];
NSInteger theYear = [todayComponents year];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate* todayDate = [gregorian dateFromComponents:components];
[components release];
[gregorian release];
return todayDate;
}
ich es will ein Datum wie folgt zurück: "2010-11-03 00.00.00 +01". Aber irgendwie hält mich die Zeitzone auf Fehler, weil dieser Code "2010-11-02 23:00:00 +0000" zurückgibt.
Kann jemand mir sagen, wie man diesen Code repariert, um das korrekte Datum tatsächlich zurückzugeben? Oder kann ich einfach dieses Datum verwenden und meine Anwendung wird es aufgrund der Zeitzone, auf die das Gerät eingestellt ist, selbst konvertieren.
Ich muss bestimmte Ereignisse in meiner App in einer Datenbank protokollieren, die auch nur die Methode [NSDate date] verwendet. Bedeutet das, dass die Methode [NSDate date] auch die Zeit ohne Zeitzoneninformationen verwendet?
EDIT: Ich denke, es hat etwas mit der Sommerzeit Bug zu tun. Die Dinge, die ich sehe, sind genau die gleichen wie die Uhr-App, mit dem Bug, der die Leute spät aufwachen lässt. Außerdem ist die TimeZone standardmäßig auf die Zeitzone eingestellt, die derzeit auf Ihrem Gerät eingestellt ist. Sie sollte also unverändert bleiben, bis Sie die Zeitzone auf dem Einstellungsbildschirm ändern.
EDIT2: Ok, einige weitere Tests:
NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone defaultTimeZone]);
gibt mir die folgenden Ergebnisse:
2010-11-03 23:23:49.000 App[8578:207] CurrentDate: 2010-11-03 22:23:49 +0000
2010-11-03 23:23:49.001 App[8578:207] TZ: Europe/Amsterdam (GMT+01:00) offset 3600
Nozzi ... wirklich? Folgen Sie mir? : P. Ich denke, es hat etwas mit dem Sommerzeit-Bug zu tun. Die Dinge, die ich sehe, sind genau die gleichen wie die Uhr-App, mit dem Bug, der die Leute spät aufwachen lässt. –
Ich weiß nicht, diese @jnozzi Twitter Person, die Sie erwähnt. Was? Du hast es nicht erwähnt? VERDAMMT! Oh ja, ich bin es. ;-) Hmm. Ich habe davon nichts gehört. Könnte das iPhone bei Verwendung von Foundation-Kram markieren, da Mac/iOS in diesen Fällen nicht klar ist. :-) –
Muhaha, ich weiß wo ich dich überall finde. Mein Beitrag wurde erneut aktualisiert. Muss ich diesen Offset wirklich hinzufügen, wenn ich [NSDate date] anrufe? Ich hoffte, dass das OS das automatisch machen würde. –