【发布时间】:2015-07-01 16:02:05
【问题描述】:
我在英国,在 iOS 中处理日期时,他们总是迟到一小时(晚一小时),我需要的是来自 NSDate 的正确时间。我做了以下,但我得到了两个不同的时间:
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"NSDate %@",today);
NSLog(@"Time %@", [dateFormatter stringFromDate:today]);
NSDate*stringDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:today]];
NSLog(@"Time date %@",stringDate);
这是记录的内容:
NSDate 2015-07-01 16:07:22 +0000
Time 2015-07-01 17:07:22
Time date 2015-07-01 16:07:22 +0000
为什么会这样?我错过了一些明显的东西吗?当然如果字符串日期是正确的,那么执行dateFromString 应该会产生正确的结果?
我需要NSDate 的原因是我可以使用[myTime timeIntervalSince1970] 获得正确的秒数
2015-07-01 17:07:22 //is the correct date
我期待一个与我的日期和时间正确的 NSDate 对象。
更新 下面的答案帮助我找到了出错的地方,所以我改变了方法,我能够通过以下方式获取当前时间戳:
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
NSDate *curdate = [dateFormatter dateFromString:timeStamp];
int unix_timestamp = [curdate timeIntervalSince1970];
NSDate* referenceDate = [NSDate dateWithTimeIntervalSince1970: 0];
NSTimeZone* timeZone = [NSTimeZone systemTimeZone];
int offset = (int)[timeZone secondsFromGMTForDate: referenceDate];
int currentTimestamp = unix_timestamp + offset;
NSLog(@"CUrrent time stamp %d",currentTimestamp);
【问题讨论】:
-
你的系统时区是+0吗?您不会以相同的方式打印出两个日期,因此您不一定希望它们看起来相同。
-
@jtbandes 其 UTC/GMT+1
-
@jtbandes 我更新了我的代码以包含更多的 NSDate 之前。
-
这里一切正常,
16:00 GMT+0==17:00 GMT+1。你期待什么? -
这是
NSDate的description方法,它使用使用GMT 的日期格式化程序。日期不变,内部表示始终为 GMT。注意:Apple 文档指的是 GMT,而不是 UTC,所以我使用 GMT,即使它是过时的。
标签: objective-c nsdate nsdateformatter