NSDate因iOS中的不同时区而异

时间:2014-06-26 06:49:36

标签: ios nsdate nsdateformatter nscalendar nstimezone

我有一个日历应用,我在其中突出显示当前日期

我已按照以下步骤操作,目前我的设备时间是上午11:59,

印度时区,我将其更改为第一个上午9点,然后我将时区更改为圣何塞,

我的时间是6月25日下午9点24分,现在是设备日历,它显示的是6月25日,但是

在我的应用程序中它仍然显示6月26日。

我以这种方式获得当前日期

-(void)initialize
{
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit  | NSMinuteCalendarUnit)fromDate:[NSDate date]];
    NSInteger day    = [weekdayComponents day];
    NSInteger month  = [weekdayComponents month]; 
    NSInteger year   = [weekdayComponents year];

   [m_dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

    m_dateFormatter.dateFormat = @"dd/MM/yyyy";

    NSDateComponents *timeZoneComps=[[NSDateComponents alloc] init];
    [timeZoneComps setDay:day];
    [timeZoneComps setMonth:month];
    [timeZoneComps setYear:year];
    [timeZoneComps setHour:00];
    [timeZoneComps setMinute:00];
    [timeZoneComps setSecond:01];

    m_currentDate         = [gregorian dateFromComponents:timeZoneComps];   

}

所以,在这方面我需要你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为[NSTimeZone systemTimeZone]将始终为您提供设备检测到(或设置)的当前时区。由于时区已缓存在您的应用中,您还可以致电[NSTimeZone resetSystemTimeZone]以确保信息是最新的。所以,在你的代码中:

[NSTimeZone resetSystemTimeZone]; [m_dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

相关问题