NSTimeInterval的startOfDay NSDate到GMT

时间:2013-08-04 20:33:25

标签: objective-c nsdate nstimeinterval nstimezone

我正在尝试将NSDate的NSTimeInterval设置为零,所以当天的开始,但总是我的时区是GMT + 2而不是GMT,我这样做:

这是在NSDate中设置一天开始的类别:

#define DATE_COMPONENTS (NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit)
#define CURRENT_CALENDAR [NSCalendar currentCalendar]

- (NSDate *) dateAtStartOfDay
{
NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self];
components.hour = 0;
components.minute = 0;
components.second = 0;
return [CURRENT_CALENDAR dateFromComponents:components];
}

然后我这样做:

NSTimeInterval now = [[[NSDate date] dateAtStartOfDay] timeIntervalSince1970];

给我这个NSTimeInterval:

1375567200

如果我检查:

http://www.epochconverter.com

gmt时间是这样的:

GMT: Sat, 03 Aug 2013 22:00:00 GMT

Mine tiem zone: 04 agosto 2013 00:00:00 CEST GMT+2

我怎么能始终拥有GMT时间间隔?我正在寻找一个在纽约,罗马,Rio de janerio工作的解决方案,必须给我一个用户所在的gmt的nstimeinterval,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您从currentCalendar获得的日历使用当前的区域设置,从而使用正在运行的任何系统的时区。您应为此计算创建自己的日历,并将其时区设置为GMT。

NSCalendar * GMTCal = [[NSCalendar alloc] initWithCalendarIdentifier:[[NSCalendar currentCalendar] calendarIdentifier];
[GMTCal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];