将UTC时间转换为本地时间

时间:2014-05-22 05:40:13

标签: ios nsdate rubymotion

我从服务器获取数据,部分数据是时间。时间以UTC格式存储在我的数据库中,因此我返回的内容也是UTC。例如:2014-05-22 05:12:40

此外,我使用DateTools来显示设备上的时差,如X hours agoX minutes ago等....

问题在于,当来自服务器的UTC时间与当地时间进行比较时,存在巨大差异。由于时差,我应该说X seconds agoX hours ago

问题

如何将服务器的日期转换为设备上设置的本地时区?

这就是我现在正在做的事情:

@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 个答案:

答案 0 :(得分:1)

我不知道它是如何在ruby运动中完成的,但是在Objective-C中,它完成如下:

1。)创建NSDateFormatter

的实例

2。)设置它的特定日期格式字符串,并设置它的特定时区

3。)通过dateformatter实例

从传入字符串中获取日期

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 :(得分: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];

答案 2 :(得分: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

试试这个