2017-11-17 4 views
3

Wenn ich log ein NSDate an die Konsole wie folgt aus:Hat NSDate seine Beschreibungsausgabe geändert?

NSDate *date = [NSDate date]; 
NSLog(@"date: %@", date); 

es protokolliert die Ausgabe:

: Fr 17. November 09:35:27 2017

Ich war erwartet, dass der Ausgang mehr wie folgt aussieht:

Datum: 2017-11-17 09:35: +0000 27

Für eine lange Zeit [NSDate description] kehrte das Datum als String in der GMT Zeitzone, was unabhängig von der Zeitzone der Maschine eingestellt. Jetzt ändert sich die Ausgabe, wenn Sie die Zeitzone des Geräts ändern (obwohl die verwendete Zeitzone nicht gedruckt wird).

Bin ich verrückt geworden? Ist die Ausgabe anders als zuvor? Das Festlegen des Bereitstellungsziels für ein früheres Betriebssystem hat keinen Einfluss auf die Ausgabe. Wenn es anders ist, wann hat es sich geändert? Ist es dokumentiert?

Edit: CFDate gibt immer noch die alte Beschreibung:

CFAbsoluteTime  absTime; 
CFDateRef   aCFDate; 
absTime = CFAbsoluteTimeGetCurrent(); 
aCFDate = CFDateCreate(kCFAllocatorDefault, absTime); 
CFStringRef dateDescription = CFCopyDescription(aCFDate); 
NSString *description = (__bridge NSString *)dateDescription; 
NSLog(@"%@", description); 

2017-11-17 10:50:19 +0000

Ein weiterer Edit (Xcode Version 9.2) :

Objective-C hat unterschiedliche Ausgabe abhängig davon, wie die Datum protokolliert:

NSDate *date = [NSDate date]; 
NSLog(@"date: %@", date); 
NSLog(@"date: %@", date.description); 
NSLog(@"date: %@", date.debugDescription); 

: Di Jan 23 10:19:29 2018
Datum: 2018.01.23 10.19.29 0.000
Datum: 2018.01.23 10 19: 29 +0000

ich hatte gedacht, dass ein Objekt direkt Anmeldung war die gleiche wie seine description anzumelden.

Swift hat das alte Verhalten:

let now = Date() 
print("\(now)") 
print("\(now.description)") 
print("\(now.debugDescription)") 

2018-01-23 10:19:00 +0000
2018-01-23 10:19:00 +0000
2018-01 -23 10:19:00 +0000

+0

_ „Einstellen des ** Implementierungsziel ** zu einem früheren OS“ _ Das SDK, das Sie gegen sind die Verknüpfung der „Basis SDK“ genannt wird, das ist, was Sie zu Test ändern wollen würde Dies. –

+0

@JoshCaswell Danke, ich hatte das Gefühl, dass das Einsatzziel das falsche war. Schade, Base SDK ist so viel schwieriger zu ändern. –

Antwort

-1

Set Date Formatierer wie unten

NSTimeZone *timeZone = [NSTimeZone defaultTimeZone]; 
 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
 
[dateFormatter setTimeZone:timeZone]; 
 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];

Verwandte Themen