将UTC时间转换为本地时间

3
我正在从服务器获取数据,其中一部分数据是时间。时间以UTC格式存储在我的数据库中,因此我返回的也是UTC时间。例如:2014-05-22 05:12:40 此外,我使用DateTools 来在设备上显示时间差,如X小时前X分钟前等等....。
问题是,当来自服务器的UTC时间与本地时间进行比较时存在巨大差异。本应该显示为X秒钟前的内容因为时间差异而变成了X小时前
问题:
如何将来自服务器的日期转换为设备上设置的本地时区?
这是我目前正在做的事情:
@date_formatter = NSDateFormatter.alloc.init
@date_formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
@date_from_server = "2014-05-22 05:12:40"
@date = @date_formatter.dateFromString(@date_from_server)
@time.text = @date.shortTimeAgoSinceNow
3个回答

2
我不知道在Ruby Motion中如何实现,但在Objective-C中,可以按照以下步骤进行:
1.) 创建一个NSDateFormatter类的实例。
2.) 设置它的特定日期格式字符串,并设置它的特定时区。
3.) 通过日期格式化实例从传入的字符串中获取日期。
4.) 将日期格式化实例的时区更改为本地时区。
5.) 将先前获取的日期转换为新的时区。
在Objective-C中。
NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateFormat:incomingDateFormat];
[df setTimeZone:incomingTimeZone]; // Can be set to @"UTC"

NSDate *date = [df dateFromString:incomingDateString];

[df setDateFormat:newDateFormat];
[df setTimeZone:newTimeZone]; //// Can be set to [NSTimeZone localTimeZone]

NSString *newDateStr = [df stringFromDate:date];

我相信在Rubymotion中也可以做到同样的事情。

1
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
formater.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *datestr = @"2014-05-22 05:12:40";
formater.timeZone = [NSTimeZone localTimeZone];
NSDate *date = [[formater dateFromString:datestr] dateByAddingTimeInterval:formater.timeZone.secondsFromGMT];

0
NSDateFormatter *df=[[[NSDateFormatter alloc] init] autorelease];
    // Set the date format according to your needs
    [df setTimeZone:[NSTimeZone timeZoneWithName:@"America/Toronto"]];
    //[df setDateFormat:@"MM/dd/YYYY HH:mm "]  // for 24 hour format
    [df setDateFormat:@"YYYY-MM-dd HH:mm:ss"];// for 12 hour format

试试这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接