我从这些格式的RESTful服务中获取时间戳:
"/Date(1357306469510+0100)/"
我发现一些帖子提供了解析它的代码并创建了等效的NSDate
对象,例如:
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
NSInteger startPosition = [jsonDate rangeOfString:@"("].location + 1;
NSTimeInterval unixTime = [[jsonDate substringWithRange:NSMakeRange(startPosition, 13)] doubleValue] / 1000;
NSDate *date = [[NSDate dateWithTimeIntervalSince1970:unixTime] dateByAddingTimeInterval:offset];
但它似乎没有处理服务器时间戳的时区(+0100)。
有人可以提供完整的解决方案,还是告诉我在哪里可以找到它?
提前致谢
答案 0 :(得分:0)
以下代码应该有效。请参阅我的在线评论以获得解释。从本质上讲,你必须弄清楚你的服务器时间偏离GMT的秒数(在你的情况下,+3600
秒)。
//The date string
NSString *dStr = @"/Date(1357306469510+0100)/";
//Get the unix time
NSUInteger unixStart = [dStr rangeOfString:@"("].location + 1;
NSUInteger unixEnd = ([dStr rangeOfString:@"+"].location == NSNotFound ? [dStr rangeOfString:@"-"].location : [dStr rangeOfString:@"+"].location);
double unixTime = [[dStr substringWithRange:NSMakeRange(unixStart, unixEnd - unixStart)] doubleValue] / 1000;
NSLog(@"%f", unixTime);
//Get the timezone
NSUInteger tzStart = unixEnd;
NSUInteger tzEnd = [dStr rangeOfString:@")"].location;
float tzOffset = [[dStr substringWithRange:NSMakeRange(tzStart, tzEnd - tzStart)] floatValue] / 100 * 60 * 60;
NSLog(@"%f", tzOffset);
//Calculate the date
NSDate *date = [[NSDate dateWithTimeIntervalSince1970:unixTime] dateByAddingTimeInterval:tzOffset];
NSLog(@"%@", date);
答案 1 :(得分:0)
据我所知,Unix时间戳没有时区字段,它以GMT为标准。如果要将带时区的时间戳转换为当地时间,请添加或减去与GMT不同的秒数。从
获得间隔时NSTimeInterval unixTime = [[jsonDate substringWithRange:NSMakeRange(startPosition, 13)] doubleValue] / 1000;
为unixTime添加3600秒,
unixTime = unixTime+3600.0;//covering the offset. One hour in your case.
现在显示
NSDate *date = [NSDate dateWithTimeIntervalSince1970:unixTime];