When I log an NSDate
to the console like this:
NSDate *date = [NSDate date];
NSLog(@"date: %@", date);
it logs the output:
date: Fri Nov 17 09:35:27 2017
I was expecting the output to be more like this:
date: 2017-11-17 09:35:27 +0000
For a long time [NSDate description]
returned the date as a string in the GMT time zone no matter what the time zone of the machine was set to. Now the output changes when you change the time zone of the machine (although it doesn't print the time zone that it's using).
Have I gone crazy? Is the output different that it was before? Setting the deployment target to an earlier OS makes no difference to the output. If it's different, when did it change? Is it documented?
Edit: CFDate
still gives the old description:
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
Another Edit (Xcode Version 9.2):
Objective-C has different output depending on how the date is logged:
NSDate *date = [NSDate date];
NSLog(@"date: %@", date);
NSLog(@"date: %@", date.description);
NSLog(@"date: %@", date.debugDescription);
date: Tue Jan 23 10:19:29 2018
date: 2018-01-23 10:19:29 +0000
date: 2018-01-23 10:19:29 +0000
I had thought that logging an object directly was the same as logging its description
.
Swift has the old behaviour:
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