我在英国,在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 :(得分:1)
NSDate是一个绝对的时刻,它没有时区。您拥有的日期对象是正确的:它正是执行代码的那一刻。
如果您需要在特定时区内使用该时刻的字符串表示,请像使用stringFromDate:
一样使用-[NSCalendar components:fromDate:]
。
如果您需要知道特定时区的小时/分钟数值,请使用[calendar setTimeZone:...];
NSDateComponents* components = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:date];
。
<table style="black">
答案 1 :(得分:1)
日期格式化程序默认为本地时区。如果您想要一个不同的时区,请指定它。 NSLog
日期使用默认为GMT(UTC)的'NSDate description`方法。
检查代码:
NSDate *today = [NSDate date];
// Creates today's data in GMT (UTC) All NSDates are referenced to GMT.
NSLog(@"NSDate %@",today); (moved up for explanation ordering)
// NSDate 2015-07-01 16:07:22 +0000
// Displays the date in GMT
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
// Creates a date for matter with the system timezone
NSLog(@"Time %@", [dateFormatter stringFromDate:today]);
// Time 2015-07-01 17:07:22
// Creates a string representation in the system timezone and displays it
NSDate*stringDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:today]];
// Creates a date from the string taking into the system timezone
NSLog(@"Time date %@",stringDate);
// Time date 2015-07-01 16:07:22 +0000
// Displays the date in GMT.