2013-10-07 13 views
0

我正在从远程源导入多个引用日期。日期表示一年中任意一天的日期(在本例中为01/01/2000)。它们以Unix时间戳提供。例如946717200代表上午9点。我也获得每个地点的时区。在相同的时区格式化NSDates,而不考虑系统时区

我正在使用以下代码将这些时间转换为与UTC的正确偏移量的实际日期。

-(NSDate *)dateWithInterval:(NSTimeInterval)interval referenceDate:(NSDate *)aRealDate timezone:(NSTimeZone *)aTimeZone 
{ 
    NSDate *time = [NSDate dateWithTimeIntervalSince1970:interval]; 
    NSDateComponents *components = [[NSDateComponents alloc] init]; 

    //Set the timezone 
    [components setTimeZone:aTimeZone]; 

    //I'm using Erica Sadun's NSDate+utilities category on NSDate to provide the shorthand methods 
    [components setDay:[aRealDate day]]; 
    [components setMonth:[aRealDate month]]; 
    [components setYear:[aRealDate year]]; 
    [components setHour:[time hour]]; 
    [components setMinute:[time minute]]; 
    [components setSecond:[time seconds]]; 

    return [[NSCalendar currentCalendar] dateFromComponents:components]; 
} 

例如随着946717200给定的输入,当前日期和美洲/洛杉矶时区,我给出一个日期2013年10月7日16:00:00 +0000,但是当我使用该NSDateFormatter它的格式,与时区设置为美洲/洛杉矶,系统设置为相同的时区,这会显示为2013-10-07T01:00:00-0700

什么我没有做是否正确?

+0

你的问题是在这个日期出现的“T”是吗? –

+0

不,问题在于实际日期不正确,格式不是问题。 – Jonathan

回答

0

问题是NSDate-实用程序类别。它完全忽略日期的时区修饰符,并始终通过考虑时区来创建它。通过使用我自己的日期组件并设置时区属性,问题就消失了。

相关问题